#include<iostream>
using namespace std;
class A{
public:
A(int n);
A(A& b);
public:
int v;
};
A::A(int n):v(n){
}
A::A(A&b){
v = b.v;
cout <<"hello world"<<endl;
}
A func(){
A b(4);
return b;
}
int main()
{
cout << func().v<<endl;
return 0;
}
以上函数运行时,没有输出“hello",也就是没有调用我写的复制构造函数。
按理说,返回一个类,是会调用复制构造函数的呀?希望能解答一下
https://blog.csdn.net/sxhelijian/article/details/50977946
这个应该是会调用拷贝构造函数的,至少vs2017会调用,至于你这里说不被调用,可能是不同的编译器对该程序有着不同的优化方式。
被优化掉了吧,不同的编译器结果不一定相同的
可以把你的编译器或者环境一起报上来。
一般来说是编译器优化导致的,如果你是在Linux下用g++的话。