gpt4 book ai didi

c++ - "Thing thing;"和 "Thing thing = Thing();"之间有什么区别,我什么时候应该使用其中一个?

转载 作者:太空宇宙 更新时间:2023-11-03 10:44:13 25 4
gpt4 key购买 nike

我不明白以下两个语句之间的区别:

Thing thing;

Thing thing = Thing();

两者都创建了一个Thing对象,并把它放在变量thing中,对吧?如果是,两个问题:

1- 两者之间的技术差异是什么?

2- 我什么时候应该使用一个而不是另一个?

请注意:

A- 我没有使用 C++ 11。

B- C++ 新手,请使用对新手友好的词。

最佳答案

Thing thing;

是默认初始化。如果 Thing 是类类型,它会调用 Thing 的默认构造函数,仅此而已。

Thing thing = Thing();

值初始化一个临时的 Thing,然后将临时的复制/移动到 thing 中。在实践中,编译器将省略复制/移动,使其有效地成为值初始化,但这仍然需要复制/移动构造函数可用。 = Thing(); 语法是获取值初始化语义所必需的,因为 Thing thing(); 是令人烦恼的解析。*

值初始化和默认初始化之间的区别在于,在某些情况下(确切的情况是 depend on the version of the standard ,但是没有用户提供的构造函数的非 union 类类型,以及非类非数组类型,以及这些类型的数组在所有版本中都有资格),值初始化将在调用默认构造函数之前首先进行零初始化。

如果 Thing 可以是非类(例如,在模板中)或者是将获得零初始化处理的类类型(例如,POD 类),则使用第二个版本很有帮助) 并且您希望它具有明确定义的值。

*Thing thing{}; 在初始化语义上与 C++14 中的普通值初始化有细微的不同。

关于c++ - "Thing thing;"和 "Thing thing = Thing();"之间有什么区别,我什么时候应该使用其中一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26191840/

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