gpt4 book ai didi

c++ - "Creation point"自动变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:53 27 4
gpt4 key购买 nike

void foo()  
{
//some code

MyClass m();

//some more code
}

C++ 标准是否确保 MyClass 类的构造函数将在 //some code 运行后被调用,还是未指定行为?

最佳答案

这个问题的技术答案是编译器将保证构造函数根本不运行,因为行

MyClass m();

不是变量声明。相反,它是一个名为 m 的函数的原型(prototype),该函数不接受任何参数并返回一个 MyClass。要使它成为一个对象,您需要删除括号:

MyClass m;

因为这是一个困惑的根源,在 C++11 中有一种新语法可用于初始化自动对象。不要使用圆括号,而是使用大括号,如下所示:

MyClass m{};

这告诉编译器按预期使用 MyClass 的 nullary 构造函数,因为无法将上述内容解释为函数原型(prototype)。

如果您进行此更改,编译器将保证 m 的构造函数在第一段代码之后和第二段代码之前执行。

希望这对您有所帮助!

关于c++ - "Creation point"自动变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9307197/

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