这个C ++异常语法(std :: runtime_error)有什么问题?

时间:2014-01-20 17:13:27

标签: c++

下面使用std::range_error有什么问题? 当我编译这段代码时,我得到了一个

"syntax error :';'"

(顺便说一下,我知道函数的异常规范现在被忽略了,但这会导致语法错误吗?)

#include <stdexcept>

void function() throw(std::runtime_error) {
  if(true)
    throw (std::range_error);
}

3 个答案:

答案 0 :(得分:4)

range_error是一种类型。要抛出一个,你需要创建一个对象:

throw std::range_error("Your message goes here");

您可以像在函数的异常说明符中那样使用类型名称;但你不应该因为他们被弃用了。

答案 1 :(得分:1)

至少有两个问题......

  • 您需要#include <stdexcept>
  • std::range_error构造函数需要字符串参数

答案 2 :(得分:0)

throw有两种用途:

  1. 作为声明。语法为throw(<exception specification>)

  2. 作为陈述。语法为throw exception_object;

  3. 您的代码正在尝试使用两者,但第二种语法错误。

    在一个不相关的问题上,异常规范声明已经失宠,因为它们提供的利益相对较少,让许多用户感到困惑(因为他们提供编译时检查)并且有更好的在C ++ 11中替换。