gpt4 book ai didi

c++ - `constexpr` 函数也应该是 `noexcept` 吗?

转载 作者:可可西里 更新时间:2023-11-01 17:50:15 25 4
gpt4 key购买 nike

当我定义一个constexpr 函数时,我是否也应该将它声明为noexcept?我想在参数和用法满足编译时评估要求的情况下,潜在异常的含义是没有实际意义的。但对于在运行时评估函数的情况,它会照常适用。

作为一个实际问题,如果函数确实简单,可能使用内置算术或转换,这样我希望编译器始终可以内联函数并对其进行优化,如果我离开 noexcept 对生成代码的效率有影响吗?

最佳答案

不,你不应该。

“不能失败”和“可以在编译时求值”是正交问题。例如,你想写一个整数幂函数,但你想把幂作为有符号的(因为你认为无符号数应该只用于非常特殊的情况)。现在你说你想在幂为负时抛出异常。在 C++14 中你可以这样写:

constexpr int ipow(int base, int power) {
if (power < 0) throw std::domain_error("negative power");
int result = 1;
for (int i = 0; i < power; ++i) result *= base;
return result;
}

这个函数显然不是 noexcept,但是对于非负参数,你显然可以在编译时计算它。如果您在编译时需要结果的上下文中尝试使用负参数,则会出现编译错误,这应该没问题。

关于c++ - `constexpr` 函数也应该是 `noexcept` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35696014/

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