创建类实例的c++语法

C++ Syntax For Creating Instances Of A Class

本文关键字:c++ 语法 实例 创建      更新时间:2023-10-16

我一直在看如何在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();

没有首选选项的问题

ClassExample classExample2();

ClassExample classExample3(void);

声明一个返回ClassExample对象的函数

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

2和3声明函数,而不是变量,这就是为什么你没有观察到变量。

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