以下是代码:
#include <iostream>
const int& temp_func() {
return 3;
}
int main() {
std::cout << temp_func() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
用g++编译时(Ubuntu 9.3.0-17ubuntu1~20.04),结果:
[1] 402809 segmentation fault ...
Run Code Online (Sandbox Code Playgroud)
另一方面,当使用 clang++-12 编译时,结果:
3
Run Code Online (Sandbox Code Playgroud)
两者都是正确的。您的代码具有未定义的行为。当您创建return 3临时int对象时,函数返回的引用将绑定到该临时对象。return 语句完成后,该临时对象将被销毁,而引用将悬空。尽管该引用的任何访问都具有未定义的行为。
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |