传递函数的返回值作为参考

时间:2013-09-16 14:35:11

标签: c++ reference stack return-value pass-by-reference

在以下情况下会发生什么:

int functionA() {
    return 25;
}

void functionB(const int& ref) {
    cout << ref << endl;
}

void start() {
    functionB(functionA());
}

编译此示例时,它会输出正确的值25.这是如何工作的?当仅使用对它的引用时,不应该删除堆栈上引用的返回值(从堆栈中删除),还是行为未定义?

2 个答案:

答案 0 :(得分:9)

由于const int& ref这个“有效” - 当引用为const时(保证您不想更改它),编译器将在调用代码中生成一个临时对象({ {1}}在你的情况下),然后将引用传递给它。

如果删除start,则无法编译,因为const的结果无法转换为引用。

答案 1 :(得分:8)

堆栈上没有“返回值”(更不用说“堆栈”):functionA按值返回int ,因此表达式{{1 }}只是类型functionA()的临时值。这个值绑定到int中的常量引用,并且因为它的生命周期是完整表达式的一生,所以一切都很好。