繁体   English   中英

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();

是一个函数声明 - 看到最令人烦恼的解析getw

第一种情况是默认初始化。

最后一种情况,C ++ 11的新手,将调用默认构造函数(如果有的话),因为即使它看起来像初始化列表{} ,它也是空的。

方法一和三调用默认构造函数。

MyClass c3{};

是一种称为统一初始化的新初始化语法。 这称为默认大括号初始化。 然而:

MyClass c2();

声明一个函数c2 ,它不带任何带MyClass返回类型的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM