异常规范在声明和功能实现方面不兼容
Exception specifications are not compatible in declaration and in realisation of function
我们有以下代码
int main()
{
void f() throw(int);
f();
return 0;
}
void f() { }
GCC和clang编译得很好。但是,在标准中有这样一段话:
n3376 15.4/4
如果函数的任何声明具有异常规范,则该异常规范不是允许所有异常,该函数的所有声明,包括定义和任何显式专用化,都应具有兼容的异常规范
对于以下示例:gcc-error,clang-warning
void f() throw(int);
int main()
{
f();
return 0;
}
void f() { }
为什么这些片段有差异?谢谢
std中的n3376 15.4/4指定函数的所有声明和定义必须具有相同的抛出类型。此处:
void f() throw(int);
int main()
{
f();
return 0;
}
void f() { }
声明CCD_ 1和定义CCD_。因此,它们之间存在冲突,因为声明是针对抛出int的函数,而定义是针对没有抛出规范的函数。
现在,当你把声明放在主作用域中时,定义不在同一个作用域中,在这个作用域中定义是未知的,所以你可以编译。
我希望你能理解我的英语,很抱歉。
相关文章:
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何使用lock_guard在c++11中实现scoped_lock功能
- 多次实现成员功能
- 如何在现代C++中实现没有宏的系统特定功能
- 模板功能实现中的错误C2975
- 代码仅在2个功能实现中的1个中溢出
- 多个精度基本功能实现
- C 将功能实现对象作为接口类型
- 功能实现:过程或线程部门
- 在接口的功能实现中
- 将功能实现为函子的优缺点
- 授权派生的功能实现,而不使其纯粹
- 将成员功能实现为外部功能
- opencv功能实现
- 纯虚拟功能实现
- 链表推回成员功能实现
- 使用信号中止功能实现
- 虚拟功能实现和多重继承
- 异常规范在声明和功能实现方面不兼容