Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 默认构造函数调用与复制构造函数调用_C++_Constructor_Copy - Fatal编程技术网

C++ 默认构造函数调用与复制构造函数调用

C++ 默认构造函数调用与复制构造函数调用,c++,constructor,copy,C++,Constructor,Copy,如果我创建如下三个对象: A myA; // line 1 A myA2 = A(); // line 2 A myA3 = myA; // line 3 我想在第二行中调用了复制构造函数。但是如果我尝试这个(VisualStudio),第1行和第2行只调用默认构造函数。当然,第3行调用复制构造函数。因此,1号线和2号线似乎没有区别。两者都调用默认构造函数。那么为什么我有不同的语法呢 顺便说一下,我的testclass A的形式如下: class A { public: A() {

如果我创建如下三个对象:

A myA; // line 1
A myA2 = A(); // line 2
A myA3 = myA; // line 3
我想在第二行中调用了复制构造函数。但是如果我尝试这个(VisualStudio),第1行和第2行只调用默认构造函数。当然,第3行调用复制构造函数。因此,1号线和2号线似乎没有区别。两者都调用默认构造函数。那么为什么我有不同的语法呢

顺便说一下,我的testclass A的形式如下:

class A { 
  public:
   A() { cout << "default ctor is called..." << endl; }
   A(const A &obj) { cout << "copy ctor is called..." << endl; }
};
A类{
公众:

A(){cout复制构造函数调用根据进行了优化;这是从C++17开始保证的

在初始化过程中,如果初始值设定项表达式是prvalue,并且源类型的cv非限定版本与目标类型的类是同一个类,则使用初始值设定项表达式初始化目标对象

请参阅:。查找“复制省略”