关于复制构造函数问题

 #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++的话。