假设以下代码是可以正确编译的合法代码,T
是类型名,x
是变量名。
语法一:
T a(x);
语法二:
T a = x;
这两个表达式的确切语义是否不同?如果是,在什么情况下?
如果这两个表达式确实具有不同的语义,我也很好奇标准的哪一部分讨论了这一点。
此外,如果 T 是标量类型的名称(也称为 int
、long
、double
,等等...),当 T 是标量类型与非标量类型时有什么区别?
最佳答案
是的。如果 x 的类型不是 T
,则第二个示例扩展为 T a = T(x)
。这要求 T(T const&)
是公开的。第一个示例不调用复制构造函数。
在检查了可访问性之后,就可以删除拷贝(正如 Tony 所指出的)。但是,在检查可访问性之前不能消除它。
关于c++ - 这两个 C++ 初始化器语法在语义上是否有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5064296/