c++ 11构造函数的区别(大括号)
C++11 Difference in Constructors (Braces)
我是一个c++新手,我注意到以下几行代码的行为不同
MyClass c1;
c1.do_work() //works
MyClass c2();
c2.do_work() //compiler error c2228: left side is not a class, structure, or union.
MyClass c3{};
c3.do_work() //works
头文件为
class MyClass {
public:
MyClass();
void do_work();
};
你能给我解释一下,这三种创建对象的方法有什么区别吗?为什么第二种方法会产生编译器错误?
第二版
MyClass c2();
是一个函数声明——参见最烦人的解析和get。
第一种情况是默认初始化。
最后一种情况是c++ 11中新出现的,它将调用默认构造函数(如果有的话),因为尽管它看起来像一个初始化列表{}
,但它是空的。
方法一和方法三调用默认构造函数。
MyClass c3{};
是一种新的初始化语法,称为统一初始化。这被称为默认大括号初始化。然而:
MyClass c2();
声明一个不带参数的函数c2
,返回类型为MyClass
。
相关文章:
- 定义类模板构造函数的两种方法之间的区别
- 将复制构造函数设置为private和=delete有什么区别
- 在C++中初始化带有和不使用构造函数调用的对象有什么区别
- 在成员初始值设定项列表和构造函数主体中委派构造函数有什么区别
- 在复制构造函数中使用和不使用 const 有什么区别
- C++复制构造函数和移动语义之间的区别
- 在结构C++,构造函数中的默认值和默认参数有什么区别
- 使用委托调用构造函数和在另一个构造函数体中调用的区别
- 两种类型的定义构造函数有什么区别?第一个使用":",第二个用大括号(如函数)定义它
- C++ 构造函数和初始值设定项行为。这 5 个代码有什么区别?
- 将参数传递给C 中的基类构造函数之间的区别
- 编译时,复制构造函数/复制分配和正常功能调用优化之间是否存在任何区别
- 在C++容器中,作为模板参数提供的分配器和作为构造函数参数提供的分配程序之间的区别
- 在构造函数中创建数组与在 C++ 中创建声明之间的区别
- C++:使用结构或枚举重载构造函数之间的区别
- 移动赋值运算符和移动构造函数之间的区别
- 赋值运算符和复制构造函数有什么区别?
- 从新重载调用构造函数和直接调用构造函数有什么区别?
- 复制构造函数和赋值运算符之间的区别
- 具有公共成员而没有构造函数的结构和类之间的编译器是否有区别