【发布时间】:2023-04-04 10:27:01
【问题描述】:
class A {};
A a;// 1
A a{};// 2
A a = {};// 3
A a = A();// 4
似乎有所有的选择。 1、2和3是一样的,只是风格的问题还是有一些不同? 4应该首先创建一个临时对象,然后将其分配给a,但只有在我完全关闭comliler的优化时才会发生,对吧?
【问题讨论】:
-
我不明白,你的问题和面向对象编程有什么关系?
-
关于可用选项的补充阅读:en.cppreference.com/w/cpp/language/initialization。一些关于兔子洞可以走多深的有趣观看:youtube.com/watch?v=7DTlWPgX6zs
-
请注意,从 C++17 开始,the 4th option does not actually create a temporary。事实上,它甚至不需要移动构造函数可用(但C++14 does)。
-
C++ 中的 Initialization 比它应该的要复杂,并且有很多极端情况。您的所有选项可能具有不同的行为(但对于您的
A,它们是相似的)。