gpt4 book ai didi

c++11 什么是第一个?构造函数还是默认值?

转载 作者:行者123 更新时间:2023-12-02 22:24:37 24 4
gpt4 key购买 nike

在 c++11 中你可以这样做:

class Foo
{
public:
Foo();
bool test = false;
};

Foo::Foo()
{
// is test guaranteed to be false now? and is it surely not overriden later?
this->test = true;
}

我想知道的基本上都在注释中描述了,我可以用我的编译器验证这一点,但是标准中是否提到了这一点?在所有平台和所有编译器上它总是相同吗?

最佳答案

现在测试肯定是假的吗?是的。

以后肯定不会被覆盖吗?它不会被覆盖。默认值设置为构造函数开头的初始值设定项列表的一部分。

如果 test 未包含在初始值设定项列表中,编译器会将其放入默认值中。对于您的构造函数,编译器实际上会为此生成代码:

Foo::Foo()
: test(false)
{
// is test guaranteed to be false now?
this->test = true;
// is it surely not overriden later?
}

使用此构造函数,测试首先会初始化为 false,然后在主体中设置为 true。

如果你写的是:

Foo::Foo()
: test(true)
{
}

测试已经在初始化列表中,编译器不会把它放在那里,测试将直接初始化为 true。

关于c++11 什么是第一个?构造函数还是默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928080/

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