gpt4 book ai didi

c++ - C++ 初始化什么时候只使用复制构造函数,什么时候同时使用复制构造函数和赋值运算符

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:48 25 4
gpt4 key购买 nike

我读过 C++ primer 加上上面说的

implementations have the option of handling this statement in two steps: using the copy constructor to create a temporary object and then using assignment to copy the values to the new object.That is, initialization always invokes a copy constructor, and forms using the = operator may also invoke an assignment operator

而且我还在一些网站上看到,像 A a2 = a1; 这样的代码与 A a2(a1); 相同,这意味着 A a2 = a1 仅调用复制构造函数。

所以我的问题是,什么时候程序只使用复制构造函数,什么时候同时使用复制构造函数和赋值运算符。谁来决定,是编译器吗?

最佳答案

这样的C++初始化语句
A a2 = a1;

永远不要使用重载的赋值运算符。

只有这样的语句

A a2; // Default construction
a2 = a1; // Applying assignment

将永远使用赋值运算符。

区别在于,如果您在完成变量定义的同一行中看到 =(类型在前面),则认为这是 初始化编译器,而不是赋值

永远不会同时使用复制构造函数和赋值运算符。

implementations have the option of handling this statement in two steps: using the copy constructor to create a temporary object and then using assignment to copy the values to the new object.That is, initialization always invokes a copy constructor, and forms using the = operator may also invoke an assignment operator

您的书在这方面可能是错误的(至少我从未注意到任何编译器实现以这种方式工作),或者您从上下文中误解了该语句。

关于c++ - C++ 初始化什么时候只使用复制构造函数,什么时候同时使用复制构造函数和赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52897708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com