"T a"、"T a()" 和 "T a=T()" 之间有什么区别,其中 T 是 class?

What are the differences between "T a", "T a()" and "T a=T()" where T is a class?

T一个C++class.

以下三个指令在行为上有什么不同吗?

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 的函数,该函数不带任何参数,其 return 类型为 T.

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