Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.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++11 若不允许异常处理,若发现传递的参数错误,如何停止类的对象构造?_C++11 - Fatal编程技术网

C++11 若不允许异常处理,若发现传递的参数错误,如何停止类的对象构造?

C++11 若不允许异常处理,若发现传递的参数错误,如何停止类的对象构造?,c++11,C++11,这里传递给day的值(100)是不正确的,我的问题是如何在构造函数中检查“day”参数以防止创建对象。 请注意,一旦我和软件工程师们谈过,不允许异常处理, ,他们已经开发了C++的ECOS项目,没有编译器支持的C++异常。因此,他们没有在构造函数中使用抛出异常 他们的方法是使用这样的简单构造函数 class Date { Date(int day, int month, int year) { } } int main() { Date d = Date(100, 2,

这里传递给day的值(100)是不正确的,我的问题是如何在构造函数中检查“day”参数以防止创建对象。
请注意,一旦我和软件工程师们谈过,不允许异常处理,

,他们已经开发了C++的ECOS项目,没有编译器支持的C++异常。因此,他们没有在构造函数中使用抛出异常

他们的方法是使用这样的简单构造函数

class Date
{
    Date(int day, int month, int year) {     }
}
int main()
{
    Date d = Date(100, 2, 1990);
}
然后始终使用
init
函数:

Date::Date()
 :
 initialized_ (false)
{}

<>他们总是检查<代码>的结果>(代码)>函数>

,我曾经和一直在开发ECOS C++软件项目的软件工程师交谈过,没有编译器支持的C++异常。因此,他们没有在构造函数中使用抛出异常

他们的方法是使用这样的简单构造函数

class Date
{
    Date(int day, int month, int year) {     }
}
int main()
{
    Date d = Date(100, 2, 1990);
}
然后始终使用
init
函数:

Date::Date()
 :
 initialized_ (false)
{}

他们总是检查<代码>()/<代码>函数的结果。

< P>一个经常被反对的现代C++编程技术,如RAII的一个论点是,它们在例外情况下不能被使用,因为异常是唯一的方式来指示构造函数的失败。这是绝对正确的

处理不允许异常的环境的唯一方法是从构造函数中取出初始化。在一个成员函数或其他什么中进行


请记住:没有例外的环境不是真的C++。你必须对它们进行更像C类的处理。

< P>一种经常被反对的现代C++编程技术(如RAII)的论点是,它们在例外情况下不能被使用,因为异常是唯一的方式来指示构造函数的失败。这是绝对正确的

处理不允许异常的环境的唯一方法是从构造函数中取出初始化。在一个成员函数或其他什么中进行


请记住:没有例外的环境不是真的C++。您必须更像对待C-with-classes一样对待它们。

为什么不允许异常处理?这似乎是做类似事情的最佳方式…@thomson_matt:为什么不允许例外重要吗?有些平台不是这样的;推理与回答他的问题无关。是的,这很糟糕,但他在问如何处理恶劣的环境。为什么不允许异常处理?这似乎是做类似事情的最佳方式…@thomson_matt:为什么不允许例外重要吗?有些平台不是这样的;推理与回答他的问题无关。是的,这很糟糕,但他在问如何处理恶劣的环境。这似乎没问题,但是否可以为类成员指定一个默认值。与初始化值(false)类似,它似乎可以,但是否可以为类成员指定默认值。类似于(false)