在调用C函数的其他非抛出内联函数中添加noexcept?

ein*_*ica 10 c++ noexcept c++11

我已经为某些C库实现了C++绑定.库API调用可能会失败,但显然不能抛出任何东西; 为了这个问题的目的,我的绑定都是内联的.

现在,对于我的大多数内联函数/方法,编译器可以弄清楚不能抛出异常; 例如,假设我有:

bool foo() { 
    auto result = wrapped_lib_foo(); 
    return some_constexpr_nothrow_cond(result); 
}
Run Code Online (Sandbox Code Playgroud)

我应该用这样的功能/方法标记noexcept吗?

笔记:

dor*_*ron 5

即使wrapped_lib_foo是一个extern "C"函数,编译器也无法知道堆栈中的某个地方wrapped_lib_foo永远不会抛出,除非你明确告诉它.

然后还有一个事实是,标记函数noexcept明确告知您的观众该函数不会抛出.

所以是的,这noexcept是一个好主意.

  • @einpoklum `extern "C"` 函数可以在 C++ 中定义,然后所有 C++ 语言功能都可用。但是即使 `extern "C"` 函数在 C 中定义,它们也可能通过函数指针或另一个 `extern "C"` 函数回调到 C++ 代码中。 (2认同)