用于创建类实例的C ++语法

时间:2014-07-01 12:03:55

标签: c++ class c++11 instance

我一直在研究如何在C ++中创建一个类的实例。似乎有几种方法可以做到这一点:

ClassExample classExample1;
ClassExample classExample2();
ClassExample classExample3(void);
ClassExample classExample4 = ClassExample();

1和4调用默认构造函数。当我使用2和3时,我似乎无法引用变量并且它们未初始化。在调试器中,它们被逐步调整。为什么是这样?这些都一样吗?有什么不同?有首选吗?

当我们有参数传递时,有两种方法可以做到这一点:

ClassExample classExample1(true, 1, "");
ClassExample classExample2 = ClassExample(true, 1, "");

再次,有区别吗?什么是首选方案?

更新

C ++ 11还引入了这种初始化形式:

ClassExample classExample2{ };

是以下的等同物:

ClassExample classExample2();

2 个答案:

答案 0 :(得分:8)

首选选项

没有问题

ClassExample classExample2();

ClassExample classExample3(void);

声明一个函数返回ClassExample对象

答案 1 :(得分:3)

1是首选选项 - 它直接初始化变量。

2和3声明函数,而不是变量,这就是你不观察变量的原因。

4(或多或少)相当于1,但它不必要地冗长,概念上更复杂,并且对类型施加了额外的要求。原则上,它创建一个临时对象,通过复制或移动它来初始化变量,然后销毁临时对象。在实践中,这将(通常)被省略,给出与第一种选择相同的结果;但除非类型具有可访问的副本或移动构造函数,否则不会编译。