C++中的构造函数:
最近在面试中问道一个问题,C++中构造函数有返回值吗?
例如
class A
{
public:
A():x(1){}
A(int i):x(i){}
private:
int x;
}
官方解释在C++标准规定了构造/析构/自定义类型转换符不可以指定返回类型。
如果构造函数有返回值比如下:有返回值且返回值为int类型;
//若构造函数有参数
int A():x_(0) { return 1; //1表示构造成功,0表示失败}
//此时如果这样定义一个临时对象:
A a = A(); //那么此时的 a.x等于多少??
因为 A()调用的是无参构造函数,此时无参构造函数调用成功,返回值为1,此时 x 赋初值为 0,并将1赋值初始化给A a, 及又会调用有参构造函数 A(int i) , 那么 a.x有变成了1,就产生了语法歧义;
构造函数的调用之所以不设返回值,是因为构造函数的特殊性决定的。从基本语义角度来讲,构造函数返回的应当是所构造的对象。否则,我们将无法使用临时对象: