结论:构造函数确实隐式地返回了一个该类的对象。
或许底层原理并非如此,但对于接触底层不多的用户来说,这样去理解,我想是没什么大问题的。
最近在学习C++类与对象时,看到了“构造函数不返回任何东西”的说法。然而学到异常处理的部分,却又看到了“throw classname();”这样的语句,这让我非常纳闷。按理说,throw一个函数,应该等价于throw这个函数返回值。但是构造函数classname()不是没有返回值吗?那这里到底throw了个啥?
在好奇心的驱使下,我百度了一圈,发现普遍共识还是构造函数不返回任何东西。然而鉴于“classname obj=classname();”和“throw classname();”这样的写法确实能通过编译,我这个没接触过底层的人还是更愿意相信,构造函数是返回了某些东西的,尽管官方没有承认。
那么它到底返回了什么内容呢?是一个对象吗?还是一个对象的引用?我决定自己动手测一测。(看到个别说法是返回this指针,这是不可能的。如果返回this指针,那么“classname obj=classname();”这样的语句就无法通过编译,因为不能把指针转换为对象)
上测试代码:
#include <iostream>
using namespace std;
class A {
public:
//这是构造函数
A(void)