我希望Visual Studio给我一个错误或者至少是一个警告,但是当我在构造函数中有一个空return
时它也没有给我:
MyObject::MyObject()
{
if (/*some condition*/)
{
//SomeCode
return;
}
// continue with other code
}
到目前为止,我在有限的经验中没有看到过这个用法,所以我的问题是在构造函数中返回是否可以?
这更像是一个好奇心问题,因为我知道编码很容易,你永远不必把返回放在那里,虽然我有一个实例,这将是非常有用的,但在使用它之前,我想看看它是否被禁止(可能是标准的,或者通常不是一个好主意)。
答案 0 :(得分:11)
标准说:
12.1构造函数
...
一个回归声明在一个体内 构造函数不应指定返回 值。构造函数的地址 不得采取 ...
在构造函数中使用return;
是可以的。我的理解是允许这样,以便程序员可以从构造函数中尽早返回,而不需要弄乱布尔标志。
答案 1 :(得分:5)
没关系。这意味着该对象已成功构建。如果您遵循在初始化列表中初始化成员变量的一般建议,它不应该咬你。 它类似于无辜的下面代码。
MyObject::MyObject () {
if (/* something */) {
// SomeCode
} else {
// continue with other code
}
}