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.这是如何工作的?当仅使用对它的引用时,不应该删除堆栈上引用的返回值(从堆栈中删除),还是行为未定义?
这"工作"是因为const int& ref- 当引用是const(保证你不想改变它)时,编译器将在调用代码中生成一个临时对象(start在你的情况下),然后将引用传递给它.
如果删除const它将无法编译,因为functionA无法将结果转换为引用.
堆栈上没有"返回值"(更不用说"堆栈"):functionA返回一个int by值,因此表达式functionA()只是类型的临时值int.这个值绑定到常量引用中functionB,并且因为它的生命周期是完整表达式,所以一切都很好.
| 归档时间: |
|
| 查看次数: |
3243 次 |
| 最近记录: |