gpt4 book ai didi

c++ - 无需简单转换即可返回对局部变量的引用

转载 作者:搜寻专家 更新时间:2023-10-31 02:11:47 24 4
gpt4 key购买 nike

我是 C++ 编程的新手,但这个问题一直在我脑海中盘旋。我知道在函数中返回对局部变量的引用是非法的,即编译此代码段:

inline int& funref() {
int a = 8;
return a; // not OK!
}

导致编译器发出警告,然后导致运行时错误。但是,为什么这段代码在没有任何警告的情况下编译并且运行时没有错误?

inline int& funref() {
int a = 8;
int& refa = a;
return refa; // OK!
}

int main() {
int& refa = funref();
cout << refa;
}

我的编译器是 Linux Fedora 平台上的 g++。

最佳答案

它仍然是错误的,它只是碰巧在(不)愉快的巧合下工作。

此代码具有未定义的行为和所有常见的警告(它可能一直有效,它可能一直有效,直到为时已晚无法修复,它可能会放火烧掉你的房子并与你的未婚妻私奔)。

编译器不需要为每个可能的错误发出诊断(警告或错误消息),只是因为并非总是可以这样做。在这里,至少你当前版本的 g++ 没有警告。不同的编译器,或不同版本的 g++,甚至是具有不同标志的相同版本,都可能会警告您。

关于c++ - 无需简单转换即可返回对局部变量的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43095077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com