gpt4 book ai didi

c++ - 为什么一个表达式是常量,而另一个不是?

转载 作者:可可西里 更新时间:2023-11-01 17:45:12 28 4
gpt4 key购买 nike

为什么 Visual Studio 2013 编译器拒绝第一个静态断言(错误 C2057),而不是第二个?

#include <limits>

typedef int Frequency;

const Frequency minHz{ 0 };
const Frequency maxHz{ std::numeric_limits<Frequency>::max() };
const Frequency invalidHz{ -1 };
static_assert(minHz < maxHz, "minHz must be less than maxHz"); // C2057
static_assert(invalidHz < minHz || invalidHz > maxHz, "invalidHz is valid"); // OK

最佳答案

我猜想,在该实现中,max() 不是 constexpr(正如 C++11 所说的那样),因此 maxHz 不是常量表达式,而 minHzinvalidHz 是。

因此第一个断言失败了,因为它不能在编译时求值;第二次成功,因为 || 之前的比较为真,所以不计算第二次比较。

关于c++ - 为什么一个表达式是常量,而另一个不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30261564/

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