Naw*_*waz 44 c++ constructor return return-type return-value
如果我在构造函数中写return语句怎么办?它符合标准吗?
struct A
{
A() { return; }
};
Run Code Online (Sandbox Code Playgroud)
上面的代码编译正常,在ideone上没有任何错误.但是以下代码不会:
struct A
{
A() { return 100; }
};
Run Code Online (Sandbox Code Playgroud)
它在ideone上给出了这个错误:
错误:从构造函数返回一个值
我理解从构造函数返回值根本没有意义,因为它没有明确提到返回类型,并且我们毕竟不能存储返回的值.但我很想知道:
void
吗?AnT*_*AnT 75
是的,在构造函数中使用return语句是完全标准的.
构造函数是不返回值的函数.不返回值的函数族包括:void函数,构造函数和析构函数.它在C++标准的6.6.3/2中说明.同样的6.6.3/2表明return
在函数中使用不返回值的参数是非法的.
6.6.3退货声明
2没有表达式的return语句只能用于不返回值的函数,即返回类型为void的函数,构造函数(12.1)或析构函数(12.4).表达式为非void类型的return语句只能用于返回值的函数; 表达式的值返回给函数的调用者.
此外,12.1/12表示
12.1构造函数
12不应为构造函数指定返回类型(甚至无效).构造函数体中的return语句不应指定返回值.
注意,BTW,在C++中使用return
void函数中的参数是合法的,只要return
有类型的参数void
void foo() {
return (void) 0; // Legal in C++ (but not in C)
}
Run Code Online (Sandbox Code Playgroud)
但是在构造函数中不允许这样做,因为构造函数不是void函数.
还有一个相对模糊的限制return
与构造函数的使用相关:在构造return
函数的function-try-block中使用是非法的(其他函数可以)
15.3处理异常
15如果返回语句出现在构造函数的function-try-block的处理程序中,则程序生成错误.
也许在构造函数中进行无类型返回的概念是控制构造函数的终止.
struct A
{
// more definitions
A()
{
if( !goodToGoOn)
return;
// the rest of the stuffs go here
}
};
Run Code Online (Sandbox Code Playgroud)