std::bitset 有 constexpr 构造函数和 constexpr operator[] 所以下面的代码编译成功:
#include <bitset>
typedef std::bitset<5> BitSet;
constexpr BitSet s1;
static_assert(!s1[0]);
购买为什么下面的代码没有?
static_assert(BitSet{}[0]);
最佳答案
当您编写 BitSet{}
时,会创建一个类型为 BitSet
的临时对象。但是 std::bitset
的 operator[]
对于非常量对象,不是 constexpr!
在您的第一个示例中,s1
隐含地是 const
,因此它使用 const operator[]
,即 constexpr
>.
因为你不能 const
直接限定一个临时变量(比如 const Foo()
是无效的),你总是可以只添加 const
到你的别名:
using BitSet = const std::bitset<5>;
关于c++ - 为什么 std::bitset<5>{}[0] 不是 constexpr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54599790/