首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

复制构造函数如何不调用

2012-03-09 
复制构造函数怎么不调用如下面代码所示:class A{public:A():num(0){}A(int n):num(n){std::cout A(int

复制构造函数怎么不调用
如下面代码所示:
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里面讲的完全不一样,
难道是书里面错了吗?

热点排行
Bad Request.