在构造函数中返回空

Sam*_*rsa 9 c++ constructor

我希望Visual Studio给我一个错误或者至少是一个警告,但是当我return在构造函数中有空时它也没有给我:

MyObject::MyObject()
{
    if (/*some condition*/)
    {
        //SomeCode
        return;
    }

    // continue with other code
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我在有限的经验中没有看到过这个用法,所以我的问题是在构造函数中返回是否可以?

这更像是一个好奇的问题,因为我明白编码是非常容易的,你永远不必把返回放在那里,虽然我有一个实例,这将是非常有用的,但在使用之前,我想看看它是否是禁止的(可能是标准的,或者一般来说不是一个好主意).

Ara*_*raK 11

标准说:

12.1构造函数
......
构造函数体中的return语句不应指定返回值.不得采用构造函数的地址.
...

可以return;在构造函数中使用.我的理解是这是允许的,这样程序员可以从构造函数中尽早返回,而不需要弄乱布尔标志.


den*_*ane 5

没关系.这意味着该对象已成功构建.如果您遵循在初始化列表中初始化成员变量的一般建议,它不应该咬你.它类似于无辜的下面的代码.

MyObject::MyObject () {
    if (/* something */) {
        // SomeCode
    } else {
        // continue with other code
    }
}
Run Code Online (Sandbox Code Playgroud)