Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ const成员的构造函数初始化未通过验证_C++_Constructor_Initialization - Fatal编程技术网

C++ const成员的构造函数初始化未通过验证

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))

上面的代码检查\n是否有良好的值,但只有在初始化后才有

如果一个人不能允许错误地初始化_n-或某个更复杂的类型(他无法控制),那么在初始化_n之前(例如,使用辅助函数),应该如何检查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)) {}
};