读书人

复制构造函数如何不调用

发布时间: 2012-03-09 16:54:58 作者: rapoo

复制构造函数怎么不调用
如下面代码所示:
class A{
public:
A():num(0)
{}
A(int n):num(n)
{std::cout << "A(int n)" << std::endl;
}
A(const A &a)
{std::cout <<"copy" <<std::endl;
this.num=a.num;
return *this;
}
private:int num;
};

int main()
{A a=10;
}
输出结果为:A(int n)
为什么不调用复制构造函数呢,请高手指教?
但C++Primer中说,先调用A(int n)这个构造函数创建一个临时对象,再调用复制构造函数初始化a


[解决办法]
书没有错,编译器也没啥错,因为C++标准给予了编译器这个优化的权力。
要知道答案,得看《excecptional c++》

探讨
int main()
{A a=10;
}
就算是A b= A(10);
仍然不会调用复制构造函数,只有等号右边的对象是一个具体的A类型的对象才会调用复制构造函数,
例如 A b;A c= b;才会调用,这跟C++Primer里面讲的完全不一样,
难道是书里面错了吗?

读书人网 >C++

热点推荐