为什么构造函数没有返回值?
意见(1)
我认为构造函数隐含的返回值就是this,因为构造函数是在类的对象产生时自动调用。构造函数被调用也就意味着产生了一个对象,而this指针是与对象实体相关联的,所以我认为它返回的就是this。举例如下:
class A
{
public:
A();
~A();
public:
void f();
};
A
aa;此语句导致类A的构造函数A()被自动调用返回一个首地址,系统就在内存中分配一块区域用来存放对象aa。这个首地址就被赋给this.
意见(2)
返回的确实应该是 A& 类型,可以利用VC的一个bug证明这一点:
class A
{
public:
A() {
cout << "A: hello, world!"
<< endl;
}
};
class B:public A
{
public:
B() {
A& a = this -> A::A();
//这句不符合C++标准,但VC居然接受了。
}
};
void
main(void)
{
B b;
}
另外,我实在想不出这个返回只有什么用,编译器在进入构造函数之前就知道this的值了,然后构造函数又返回了一个*this,而且VC至少是忽略掉这个返回值的。
意见(3)
规范规定构造函数没有返回值。
意见(4)
在C++中,为什么构造函数不能有返回值?
i)。于是,混乱来了。按照C++的规定,C
c=C();是用默认构造函数创建一个临时对象,并用这个临时对象初始化c。此时,c.x_的值应该是0。但是,如果C::C()有返回值,并且返回了1(为了表示成功),则C++会用1去初始化c,即调用但参数构造函数C::C(int
i)。得到的c.x_便会是1。于是,语义产生了歧义。使得C++原本已经非常复杂的语法,进一步混乱不堪。
原文链接: https://www.cnblogs.com/helloWaston/p/4554058.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/217208
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!