class Date
{
Date(int day, int month, int year) { }
}
int main()
{
Date d = Date(100, 2, 1990);
}
这里传递给day的值(100)不对,我的问题是如何在构造函数中检查'day'参数以防止创建对象。 请注意不允许异常处理
答案 0 :(得分:3)
对RAII等现代C ++编程技术经常提出的一个论点是它们不能在没有异常的情况下使用,因为异常是表示构造函数失败的唯一方法。这绝对是真的。
处理不允许异常的环境的唯一方法是从构造函数中取出初始化。在成员函数或其他东西中执行。
请记住:没有异常的环境不是真正的C ++。你必须更像C-with-classes对待它们。
答案 1 :(得分:2)
有一次我和那些在eCos上开发C ++项目并且没有编译器支持的C ++异常的软件开发者交谈过。因此,他们没有在构造函数中使用抛出异常。
他们的方法是使用像这样的简单构造函数
Date::Date()
:
initialized_ (false)
{}
然后总是使用init
函数:
bool Date::init(int day, int month, int year)
{
// return false if there is an error while initializing the object
// return true if there is no error
initialized_ = true;
}
他们总是检查init()
函数的结果。