function-try-block and noexcept
function-try-block and noexcept
对于以下代码
struct X
{
int x;
X() noexcept try : x(0)
{
}
catch(...)
{
}
};
Visual studio 14 CTP发出警告
警告C4297:"X::X":假定函数未引发异常,但吗
注意:__declspec(nothrow)、throw()、noexcept(true)或noexcept是在功能上指定
这是滥用noexcept
吗?或者这是微软编译器中的一个错误?
或者这是微软编译器中的一个错误?
不完全是。
像这样的所谓函数try块不能阻止异常进入外部。请考虑,由于构造函数无法完成执行,因此对象从未完全构造好。catch
-块必须抛出其他东西,否则当前异常将被重新抛出([ixcept.handle]/15):
如果控制到达末尾,则会重新引发当前处理的异常构造函数的函数try块的处理程序的析构函数。
因此编译器推断构造函数确实可以抛出。
struct X
{
int x;
X() noexcept : x(0)
{
try
{
// Code that may actually throw
}
catch(...)
{
}
}
};
应在没有警告的情况下编译。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- 在noexcept 规范中是否允许使用"this"?
- BoostPython and CMake
- 使用 noexcept 运算符 depenendet
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- NOEXCEPT 函数调用运算符的说明符_Not_fn
- 参数包内 noexcept 说明符
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- function-try-block and noexcept
- virtual noexcept(true) errors: MinGW and gtkmm