我对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();
};你能解释一下,创建对象的三种方法有什么区别吗?为什么第二种方法会产生编译器错误?
发布于 2014-06-19 13:37:36
方法一和方法三调用默认构造函数。
MyClass c3{};是一个名为均匀初始化的新初始化语法。这称为默认大括号初始化。然而:
MyClass c2();声明一个函数c2,它不接受返回类型MyClass的参数。
发布于 2014-06-19 13:40:26
第二版
MyClass c2();是一个函数声明--参见最烦人的解析和抓到。
第一种情况是默认初始化。
对于C++11来说,最后一个新的例子将调用默认的构造函数(如果有),因为即使它看起来像一个初始化列表{},它也是空的。
https://stackoverflow.com/questions/24307913
复制相似问题