在提供的代码片段中,尽管左侧对象没有调用 A 类的构造函数,假设应该是这样。此行为不是由于编译器优化所致,而是 C 的既定功能。
根据 C 标准 (§12.8.15),语句 T = x;等价于T(x);。因此,在代码片段中:
A a = A(5);
系统首先构造A(5),然后将其赋值给a。由于使用了赋值运算符 (=),因此不会调用复制构造函数。
要强制编译器默认构造左侧对象,可以编写以下代码:
A a; // a is now a fully constructed object a = A(5);
在这种情况下,首先默认构造a,然后由于对象的完整构造而调用复制构造函数。
因此至关重要了解这种行为及其在 C 编程中的潜在影响。
以上是为什么在 `A a = A(5);` 中不调用复制构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!