在C ++中调用构造函数的正确方法是什么?

伊丹·史密尔
    Communicator communicator = Communicator();

    Communicator communicator;

这两个呼叫之间有什么区别?

v

区别在于复制省略。在C ++ 17之前,

Communicator communicator = Communicator();

Communicator创建了一个临时对象,然后将其用于copy-construct communicator编译器可以对此进行优化,但是它必须检查是否可以调用copy或move构造函数(public,not delete,not explicit)。

从C ++ 17开始,复制省略规则发生了变化:引入了“未实现的值传递”。现在,在该行中没有创建临时对象,也不需要复制/移动构造函数。

以下简单代码将在C ++ 17中编译,但在C ++ 11/14中将无法编译

class Communicator {
public:
    Communicator() = default;
    Communicator(const Communicator&) = delete;
};

Communicator c = Communicator();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在C#中重新引发异常的正确方法是什么?

在Python中中断嵌套函数/构造函数调用的正确方法是什么?

在C ++中初始化变量的正确方法是什么

C ++中可变参数构造函数的用途是什么?

从C调用python函数作为回调。处理GIL的正确方法是什么?

C ++:在基类的构造函数中调用重写的方法

在构造函数中访问道具的正确方法是什么?

复制构造函数中的C ++调用函数

在C#程序中存储查询的正确方法是什么?

将C ++虚拟方法调用接收到Objective-C ++应用程序中的正确方法是什么?

什么是在C ++中重载构造函数的正确而优雅的方法

CPython中从C代码调用Python函数的机制是什么?

在C ++中,将左值完美转发到函数模板的正确方法是什么?

在C ++中调用函数的这种正确方法吗?

当在C#程序的调用堆栈中未找到任何处理程序时,正确的方法是什么

调用默认构造函数的正确方法是什么?

C ++在超类构造函数中,依赖于子类重写的许多变量的代码的正确运行方式是什么?

当您具有二维数组(在C ++中)时,调用析构函数的正确方法是什么?

在C中创建和初始化包含函数指针的结构的正确方法是什么?

在int方法C ++中调用构造函数

在C ++中,使用不同的类作为该方法的“ this”来调用存储在类内部的方法的正确语法是什么?

用于将成员函数集调用为特定变体的正确c ++变体语法是什么?

在 C++ 中解析 main 函数的大量输入的正确方法是什么

c ++:继承构造函数,但通过编辑构造函数中调用的方法进行更改

在 MySQL Connector C++ API 中使用一个函数调用执行多个查询的正确方法是什么?

为什么在 c++11 中调用了复制构造函数而不是移动构造函数?

在 C++ 中使用模板调用派生类中父类的构造函数的正确语法是什么?

在 C++11 中处理毫秒的正确方法是什么

在 C++ 构造函数中命名参数的好方法是什么?