创建类实例的c++语法
C++ Syntax For Creating Instances Of A Class
我一直在看如何在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,但它不必要冗长,在概念上更复杂,并且对类型施加了额外的要求。原则上,它创建一个临时对象,通过复制或移动变量来初始化变量,然后销毁临时对象。在实践中,这通常会被忽略,给出与第一个选项相同的结果;但是,除非该类型具有可访问的复制或移动构造函数,否则它不会编译。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- 什么文件可以修改 atom 的C++语法?
- 创建模板嵌套类实例的语法?
- C++语法差异:二维和一维数组(指针算术)
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么