C++ const成员的构造函数初始化未通过验证
上面的代码检查\n是否有良好的值,但只有在初始化后才有 如果一个人不能允许错误地初始化_n-或某个更复杂的类型(他无法控制),那么在初始化_n之前(例如,使用辅助函数),应该如何检查n是否良好C++ const成员的构造函数初始化未通过验证,c++,constructor,initialization,C++,Constructor,Initialization,上面的代码检查\n是否有良好的值,但只有在初始化后才有 如果一个人不能允许错误地初始化_n-或某个更复杂的类型(他无法控制),那么在初始化_n之前(例如,使用辅助函数),应该如何检查n是否良好 class foo { private: const int _n; public: foo(int n) : _n(n) { if(!nIsValid(_n))
class foo
{
private:
const int _n;
public:
foo(int n) : _n(n)
{
if(!nIsValid(_n))
throw "bad value";
}
};
定义“good value”。你对你的第二个版本有什么问题吗?看起来在这种情况下它不应该影响功能,但最好在“\n”作为函数参数和“\n”作为类成员中添加一些区别。如果
\n
是类对象,它的构造函数不应该抛出无效的构造吗?否则,它“显然”处于可以再次被破坏的状态,版本1将这样做。
class foo
{
private:
int IsValid(int & _n)
{
if(!IntChecker(_n))
throw "bad value";
else
return _n;
}
const bar _n;
public:
foo(int n) : _n(IsValid(n)) {}
};