初始化错误值坏样式后抛出异常?

Eri*_*ika 3 c++ initialization exception

以下定义是坏风格还是普通错误?也就是说,初始化一个被认为不正确的值之后抛出是不对的?

myClass::myClass(int arg) : value(arg)
   {
    if (value < 0)
       throw (myException("Negative value not allowed!"));
   }
Run Code Online (Sandbox Code Playgroud)

似乎最好使用intializer-list而不是在正文中赋值,并且根据我的理解,如果我分配了值之后之前抛出它并不重要.

Jos*_*man 5

允许使用初始值设定项列表的替代方法,如果参数不在有效范围内,也可以在初始化值之前抛出:

inline int RequirePositive(int value)
{    
    if (value < 0) throw (myException("Negative value not allowed!"));
    return value;
}

class myClass {
    myClass(int arg) : value(RequirePositive(arg)) {}
};
Run Code Online (Sandbox Code Playgroud)

  • 很优雅的解决方案 (2认同)