C ++函数返回范围和引用

时间:2010-08-18 03:51:11

标签: c++

最近我正在学习C ++并对以下案例有所怀疑。

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

int function_b(){
  return 1;
}
好的,如果我打算打电话......

function_a(function_b());

function_a 是否有机会从它的参数中读取脏引用?

感谢您的时间。

4 个答案:

答案 0 :(得分:4)

不,这不会失败。由function_b返回创建的临时值保证至少在语句结束之前保持存在。

答案 1 :(得分:2)

在这种情况下,编译器将生成一个未命名的临时值,其引用将传递给function_a。您的代码大致相当于:

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

temporary的范围一直持续到调用function_a()的语句结束(这对于整数来说是无关紧要的,但可以确定何时为更复杂的对象调用析构函数)。

答案 2 :(得分:2)

您需要写如下。

'我'无法绑定到'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()); 
}

答案 3 :(得分:0)

这个问题没有实际意义。那种操作不会编译。

错误C2664:'function_a':无法将参数1从'int'转换为'int&'