簡體   English   中英

C ++函數返回范圍和引用

[英]C++ function return scope and reference

最近我正在學習C ++,對以下案例有一些疑問。

void function_a(const int &i){
  //using i to do something
}

int function_b(){
  return 1;
}

好的,如果我要打電話......

function_a(function_b());

function_a有沒有機會從它的參數中讀取臟引用?

謝謝你的時間。

不,這不會失敗。 function_b返回所創建的臨時function_b保證至少在語句結束之前保持不變。

在這種情況下,編譯器將生成一個未命名的臨時值,其引用將傳遞給function_a 您的代碼大致相當於:

int temporary = function_b();
function_a(temporary);

temporary范圍持續到調用function_a()的語句結束(這對於整數來說是無關緊要的,但可以確定何時為更復雜的對象調用析構函數)。

你需要寫如下。

'i'無法綁定到'function_b'返回的臨時值。 這里沒有關於臟引用的問題,因為這里涉及“臨時”而不是對本地函數的引用(一旦'function_b'返回就超出范圍)

void function_a(int const &i){ 
  //using i to do something 
} 

int function_b(){ 
  return 1; 
}

int main(){
   function_a(function_b()); 
}

這個問題沒有實際意義。 那種操作不會編譯。

錯誤C2664:'function_a':無法將參數1從'int'轉換為'int&'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM