提问人:idan shmuel 提问时间:12/15/2020 更新时间:12/15/2020 访问量:72
在 C++ 中调用构造函数的正确方法是什么?
what is the right way to call to constructor in c++?
问:
Communicator communicator = Communicator();
Communicator communicator;
这两个电话有什么区别?
答:
3赞
Evg
12/15/2020
#1
区别在于复制省略。在 C++17 之前,在行中
Communicator communicator = Communicator();
创建了一个临时对象,然后用于复制构造。编译器可以对此进行优化,但它必须检查是否可以调用该复制或移动构造函数(public,not deleted,not )。Communicator
communicator
explicit
从 C++17 开始,复制省略规则发生了变化:“非具体化值传递”被引入。现在,在该行中,不会创建任何临时对象,也不需要复制/移动构造函数。
以下简单代码将在 C++17 中编译,但在 C++11/14 中无法编译:
class Communicator {
public:
Communicator() = default;
Communicator(const Communicator&) = delete;
};
Communicator c = Communicator();
评论
Communicator communicator{};
Communicator
communicator
Communicator communicator()
Communicator communicator{}
()
{