C++ 构造函数有返回值吗?(隐式或显式)

-1 c++ constructor object c++11

我想知道并且找不到可靠的来源来回答我的问题:构造函数是否隐式返回对象本身类型的值?

我的来源:https ://blog.miyozinc.com/core-tutorials/cpp/cpp-constructors-destructors/ (确实返回)

C++中复制构造函数有返回值吗(不返回)

dfr*_*fri 5

不。

根据[class.ctor]/6

构造函数主体中的 return 语句不应指定返回值。不应获取构造函数的地址。

并且,类似地[stmt.return]/1[stmt.return]/2

/1 函数通过 return 语句返回到其调用者。

/2 [...] 不带操作数的 return 语句只能在返回类型为 cv void 的函数、构造函数或析构函数中使用。[...]从构造函数、析构函数或具有 cv void 返回类型的非协程函数的末尾流出相当于没有操作数的返回。

构造函数没有返回值,但完成后它们返回给调用者

struct S {
    S(int) { }   
};

int main() {
    S s{42};
}
Run Code Online (Sandbox Code Playgroud)

相当于

struct S {
    S(int) { return; }   
};

int main() {
    S s{42};
}
Run Code Online (Sandbox Code Playgroud)

最后,返回值与函数调用的上下文相关,但S s{42}S{42}S s(42)或都不S(42)是函数调用,它是初始化器跟随声明器的情况的初始化

  • @santoro C++ 标准和它的实现是两个不同的东西。如果您问该语言对此有何看法,这就是您的答案。如果您想了解编译器的实现,则没有通用答案。只要实现遵循语言的规则,它就可以在幕后做它想做的事,并且不同的编译器会做不同的事情。 (2认同)