gpt4 book ai didi

c++ - 为什么允许在构造函数中对临时变量进行C++引用?

转载 作者:行者123 更新时间:2023-12-01 14:39:28 26 4
gpt4 key购买 nike

在下面的代码示例中,对bar变量的引用是否无效,因为该变量是本地变量?构造函数返回后,是否不删除bar变量?此后引用会发生什么?

class Foo
{
public:
Foo(int bar) : bar_(bar)
{
}

int &bar_;
};

Foo foo{456};

int main()
{
std::cout << foo.bar_ << std::endl;
// output: 456
return 0;
}

(此代码使用 g++ -Wall -Wextra编译时没有错误或警告)

最佳答案

简短的答案是您的分析基本上是正确的。 bar_将是一个悬挂的引用,因为它的引用将在ctor返回时被销毁。

一些编译器(特别是clang)会警告您这一点:

foo.cpp:6:25: warning: binding reference member 'bar_' to stack allocated
parameter 'bar' [-Wdangling-field]
Foo(int bar) : bar_(bar)
^~~
foo.cpp:10:10: note: reference member declared here
int &bar_;
^
1 warning generated.

我的个人建议是安装并定期至少使用几个不同的编译器,并在每个虚拟机上启用(实际上是?)所有警告,以帮助捕获此类问题。像cppcheck这样的类似于Lint的工具也很有用。

关于c++ - 为什么允许在构造函数中对临时变量进行C++引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61510661/

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