相关疑难解决方法(0)

理论上,但不是实际上,抛出函数应该被声明为noexcept吗?

声明以下函数是否安全,noexcept即使v.at(idx)理论上可以抛出out_of_range异常,但实际上不是由于边界检查?

int get_value_or_default(const std::vector<int>& v, size_t idx) noexcept {
    if (idx >= v.size()) {
        return -1;
    }
    return v.at(idx);
}
Run Code Online (Sandbox Code Playgroud)

c++ function noexcept

21
推荐指数
3
解决办法
1251
查看次数

为什么允许在noexcept-tagged函数中抛出异常?

我很难理解这一点.

double compute(double x, double y) noexcept
{
   if (y == 0)
       throw std::domain_error("y is zero");
   return x / y;
}
Run Code Online (Sandbox Code Playgroud)

这在clang中编译得很好(我没有检查过gcc),但这对我来说似乎是胡说八道.为什么编译器允许noexcept函数包含throw语句?

c++ tags compilation exception noexcept

7
推荐指数
2
解决办法
2452
查看次数

标记为noexcept的函数内部是否有例外?

假设我有一个标记为的函数,noexcept但里面有一行代码可以抛出.那行代码将在try块中,异常将被捕获.这会导致什么吗?

void MyFunc() noexcept
{
    try {
        throw std::exception("...");
    } catch (const std::exception & e) {
        // I'll deal with it here...
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ exception noexcept c++11

3
推荐指数
2
解决办法
1176
查看次数

标签 统计

c++ ×3

noexcept ×3

exception ×2

c++11 ×1

compilation ×1

function ×1

tags ×1