gpt4 book ai didi

c++ - 使用 noexcept 优化 std::bitset

转载 作者:行者123 更新时间:2023-11-27 23:49:54 25 4
gpt4 key购买 nike

我有一些代码需要检查位字段中的某个位是否已设置。我对优化的 std::bitset.count 的编译方式印象深刻,所以认为这也是一个很好的用途。令我惊讶的是,当我使用 bitset.test 时,编译器仍在检查异常,即使我添加了 noexcept。

我还有其他检查以确保我不会测试超出范围的位。我还能做些什么来优化这段代码吗?

bool bitset_test(int n, size_t m) noexcept {
// The caller already verifies m is within range
return std::bitset<64>( n ).test( m );
}

编译输出:https://godbolt.org/g/uRggXD

最佳答案

Is there anything else I can do to optimize this code?

是的!就像其他容器一样,std::bitset 具有获取特定位的功能,可以进行边界检查,也可以不进行边界检查。 test 是边界检查函数,会抛出异常。

但是如果你有其他测试来确保m不是太高,那么你可以使用std::bitsetoperator[]which doesn't have any exception handling in the resulting assembly ,因为它假定您传递的是正确的值:

bool bitset_test(int n, size_t m) noexcept {
return std::bitset<64>(n)[m];
}

正如其他人所提到的,编译器仍然在生成的程序集中生成异常的原因是,如果抛出异常,编译器仍然必须调用 std::terminate,所以它不能忽略异常。

关于c++ - 使用 noexcept 优化 std::bitset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47231792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com