最近我正在学习C ++并对以下案例有所怀疑。
void function_a(const int &i){
//using i to do something
}
int function_b(){
return 1;
}
好的,如果我打算打电话......
function_a(function_b());
function_a 是否有机会从它的参数中读取脏引用?
感谢您的时间。
答案 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&'