Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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++ 我应该在抛出异常时使用mil吗_C++_Exception_Constructor - Fatal编程技术网

C++ 我应该在抛出异常时使用mil吗

C++ 我应该在抛出异常时使用mil吗,c++,exception,constructor,C++,Exception,Constructor,我有一个对象具有以下属性: //m_minute is a data member Minute::Minute(size_t _minuteInHour ): m_minute( _minuteInHour ) { if (_minuteInHour >= 60) { throw std::out_of_range("only 60 minutes in one hour, 0 - 59"); } } 由于我只在主体中检查值,我应该在MIL中启动

我有一个对象具有以下属性:

//m_minute is a data member
Minute::Minute(size_t _minuteInHour ): m_minute( _minuteInHour )
{
    if (_minuteInHour >= 60)
    {
        throw std::out_of_range("only 60 minutes in one hour, 0 - 59");
    }
}
由于我只在主体中检查值,我应该在MIL中启动数据成员,还是应该使用检查值合法性并在非法时抛出异常或返回合法值的函数

size_t CheckMinuteLegality( size_t _minute ) 
{
    if ( _minute >= 60 )
    {
        throw std::out_of_range("only 60 minutes in one hour, 0 - 59");
    }
    _return minute; 
}
问题是我是否应该: A.从MIL调用函数 B使用MIL和大于测试值 C测试值,然后在不使用MIL的情况下将其分配给数据成员


谢谢

这真的有什么不同吗?不管是哪种方式,最终都不会认为对象已初始化。尽管如此,IMO还是一个好的第一个问题,用来表示C++中的日期/时间值。我一直遵循验证传递到构造函数的值并将其赋值给成员的标准。您可以使用单独的函数来验证它,并根据函数的返回值在构造函数中抛出异常。无论哪种方式,这都不重要,由你决定。第一种方式对我来说更简单、更清晰,所以我会这么做。如果验证特别复杂,您可以在以后提取辅助函数。但这实际上是一个品味的问题。(当验证需要查看多个值(例如a+b必须<100)时,第一个版本的效果更好。)您可能不应该在此处使用
size\u t
,而只使用
int
,以便更安全地检测负值。