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

max*_*dev 9 c++ stack reference return-value pass-by-reference

在以下情况中应该发生什么:

int functionA() {
    return 25;
}

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

void start() {
    functionB(functionA());
}
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*son 9

这"工作"是因为const int& ref- 当引用是const(保证你不想改变它)时,编译器将在调用代码中生成一个临时对象(start在你的情况下),然后将引用传递给它.

如果删除const它将无法编译,因为functionA无法将结果转换为引用.


Ker*_* SB 8

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