c++ - "T a"、 "T a()"和 "T a=T()"之间有什么区别,其中 T 是一个类?

标签 c++ class constructor

T 成为一个 C++ 类。

下面三个指令在行为上有什么区别吗?

T a;
T a();
T a = T();

T 为不带参数的构造函数提供了显式定义这一事实是否对问题有任何改变?

后续问题:如果 T 为至少接受一个参数的构造函数提供定义怎么办?那么以下两条指令之间的行为会有所不同吗(在这个例子中,我假设构造函数只接受一个参数)?

T a(my_parameter);
T a = T(my_parameter);

最佳答案

T a; 执行默认初始化。

T a = T(); 执行值初始化。

T a(); 没有声明名为 a 的变量。它实际上声明了一个名为 a 的函数,该函数不接受任何参数,其返回类型为 T

讨论了默认初始化和值初始化之间的区别here .

关于c++ - "T a"、 "T a()"和 "T a=T()"之间有什么区别,其中 T 是一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71981976/

相关文章:

java - 从另一个类传递值

c++ - 获取所有 boost 测试套件/测试用例

非类 typedef 的 C++ 前向声明

Python Mysql 类错误

C++ 'Email' 没有命名类型

java - 构造函数 - 找不到符号

c++ - GLSL 1.0.0 - 在顶点和片段着色器中使用 "Varying"时出现问题

c++ - 如何在 vector 中找到第一个重复项 - C++?

c++ - 如何让子类指针指向基类指针?

java - 构造函数不能应用于给定类型