时间过得快
2018-06-25 22:57
采纳率: 50%
浏览 599

关于复制构造函数问题

 #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",也就是没有调用我写的复制构造函数。
按理说,返回一个类,是会调用复制构造函数的呀?希望能解答一下

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • threenewbee 2018-06-26 00:51
    已采纳
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • kaclok 2018-06-30 17:30

    这个应该是会调用拷贝构造函数的,至少vs2017会调用,至于你这里说不被调用,可能是不同的编译器对该程序有着不同的优化方式。

    评论
    解决 无用
    打赏 举报
  • AlbertS 2018-07-07 09:10

    被优化掉了吧,不同的编译器结果不一定相同的

    评论
    解决 无用
    打赏 举报
  • 独孤的根号三 2018-07-14 06:34

    可以把你的编译器或者环境一起报上来。
    一般来说是编译器优化导致的,如果你是在Linux下用g++的话。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题