1.用类的一个实例化对象去初始化另一个对象的时候

2.函数的参数是类的对象时(非引用传递)

3.函数的返回值是函数体内局部对象的类的对象时 ,此时虽然发生(Named return Value优化)NRV 优化,但是由于返回方式是值传递,所以会在返回值的地方调用拷贝构造函数

另:第三种情况在Linux g++ 下则不会发生拷贝构造函数,不仅如此即使返回局部对象的引用,依然不会发生拷贝构造函数

总结就是:即使发生NRV优化的情况下,Linux+ g++的环境是不管值返回方式还是引用方式返回的方式都不会发生拷贝构造函数,而Windows + VS2019在值返回的情况下发生拷贝构造函数,引用返回方 式则不发生拷贝构造函数。

 

在c++编译器发生NRV优化,如果是引用返回的形式则不会调用拷贝构造函数,如果是值传递的方式依 然会发生拷贝构造函数。