一条线和两行声明之间的差异
Difference between one line and two line declaration?
在C 中,
之间是否存在任何区别Object o;
o = Object(); // calling the class constructor
和
Object o = Object(); // one-line declaration and construction
在其他语言(例如Java(中是同一件事吗?(除语法外(
是的,有区别。
实际上,没有"两行声明"之类的东西。您的术语全都关闭了。让我们看看
Object o;
o = Object();
在这里您声明了一个对象o
,调用默认构造函数。然后,在下一行中,您还使用默认的构造函数创建了另一个另一个对象(这个没有名称的对象(,然后将其分配给 o
。周围非常浪费。
Object o = Object();
在这里,您声明了一个对象o
,用另一个对象调用复制构造函数(这个没有名称的对象(。这个称为"复制初始化",在此示例中也很浪费,尽管称为"复制elision"的功能可能会消除您的冗余。
您想要的是:
Object o;
这默认构造一个名为 o
的对象;解决问题。
在第一个情况下,编译器会生成一个构造函数的调用,然后为创建第二个实例的构造函数的第二个调用,并使用复制或更多分配运算符。在第二种情况下,编译器仅生成一个构造函数。
相关文章:
- 在.cpp文件之间传递结构声明,而不使用全局头文件
- 在"template"和函数声明之间使用:template<typename trait> using tr = base_trait<trait> void fn(tr::t
- 使用 enable_if 在按值传递与按引用传递之间更改函数声明
- 如何声明不同类型的模板化类之间的转换
- 类型测试对象的动态数组的这两个声明之间的区别?
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- C++声明和定义之间拆分默认参数值
- 重复符号 --- 定义和声明之间的差异
- 以下声明之间的区别
- 一条线和两行声明之间的差异
- 将全局声明为类声明语句的一部分与使用单独的语句声明全局之间是否有区别
- 指针声明和间接寻址之间的区别
- 关于C 的声明和定义之间的差异的混乱
- C++ - 在线程中使用时,将函数的返回值声明为 void/void* 之间有什么区别吗?
- 声明静态对象和指向静态对象的指针之间的区别
- 恒定声明全局或在使用它的函数中声明恒定声明之间有什么区别?
- C++函数声明和对象初始化之间的区别
- 在声明末尾或 main 中声明结构或类实例之间的区别
- 在构造函数中创建数组与在 C++ 中创建声明之间的区别
- 如果我在互斥锁之间声明一个变量并返回它,我需要使用volatile关键字吗?