剑指offer【2】——拷贝构造函数的参数类型

1、问如下代码的运行结果是?

A.编译错误,B.编译成功,运行时崩溃,C.运行正常,输出10

class A{
  private:
    int value;
  public:
    A(int n):value(n){}
    A(A other){this->value=other.value;}
    void print(){std::cout<

答:应该选A,问题出在第六行,拷贝构造函数的参数,这里采用了传值的方式传递参数,所以在调用这个函数的时,当用实参来初始化形参时,需要调用拷贝构造函数,这样就形成了递归调用的局面,而且永远不会结束。C++标准不允许拷贝构造函数按值传递参数,所以会编译错误。要解决这个问题,需要将参数传递方式改为传引用,由于函数体不需要修改参数的内容,所以将参数定义为常量引用最为合适,如下:

A(const A& other){this->value=other.value;}

你可能感兴趣的:(面试与offer)