elvismacak
2011-07-06 11:59
浏览 197

C++复制构造函数的调用

 

#include <iostream>


class A
{
public:
    A(){std::cout<<"A()";}
    A(A &a){std::cout<<"A(A&)";}
};
int main ()
{
    A a1;           //代码段 1
    A();             //代码段 2
    A a2 = A(); //代码段 3
    return 0;
}

 上面这段代码在VC下编译通过,但代码段3中只调用了A的构造函数,而没有调用复制构造函数。我把VC的代码优化关掉依然一样的结果

而将代码放在gcc下,则直接编译不通过,其输出为

 

main.cpp: In function 'int main()':

main.cpp:13: error: no matching function for call to 'A::A(A)'

main.cpp:7: note: candidates are: A::A(A&)

main.cpp:6: note:                 A::A()

 

上面的输出结果中显示要调用的是A::A(A),而不是本该调用的复制构造函数A::A(A&)

 

而当把复制构造函数注释掉时,两种环境下均编译运行正常

 

 

 

这个是为什么呢?按照语法的规则来判断,应该是先调用构造函数再调用复制构造函数呀?!求解

 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • xiangjie256 2011-07-06 13:10
    已采纳

    复制构造函数应该是:A(const A &a){std::cout<<"A(A&)";}

    [code="c++"]
    #include

    class A

    {

    public:

    A(){std::cout<<"A()";}

    A(const A &a){std::cout<<"A(A&)";}

    };

    int main ()

    {

    A a1; //代码段 1

    A(); //代码段 2

    A a2 = A(); //代码段 3

    return 0;

    }

    [/code]

    A()A()A()

    点赞 打赏 评论

相关推荐 更多相似问题