首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造函数(Braces)中的C++11差

构造函数(Braces)中的C++11差
EN

Stack Overflow用户
提问于 2014-06-19 13:34:11
回答 2查看 495关注 0票数 4

我对C++非常陌生,并且观察到,下面的代码行的工作方式不同

代码语言:javascript
复制
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

将头文件作为

代码语言:javascript
复制
class MyClass {
public:
    MyClass();
    void do_work();
};

你能解释一下,创建对象的三种方法有什么区别吗?为什么第二种方法会产生编译器错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-19 13:37:36

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

代码语言:javascript
复制
MyClass c3{};

是一个名为均匀初始化的新初始化语法。这称为默认大括号初始化。然而:

代码语言:javascript
复制
MyClass c2();

声明一个函数c2,它不接受返回类型MyClass的参数。

票数 6
EN

Stack Overflow用户

发布于 2014-06-19 13:40:26

第二版

代码语言:javascript
复制
MyClass c2();

是一个函数声明--参见最烦人的解析抓到

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

对于C++11来说,最后一个新的例子将调用默认的构造函数(如果有),因为即使它看起来像一个初始化列表{},它也是空的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24307913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档