为什么std :: bitset <5> {} [0]不是constexpr?

时间:2019-02-08 20:33:18

标签: c++ c++17

std :: bitset具有constexpr构造函数和constexpr运算符[],因此以下代码可以成功编译:

#include <bitset>

typedef std::bitset<5> BitSet;

constexpr BitSet s1;
static_assert(!s1[0]);

购买为什么以下代码没有?

static_assert(BitSet{}[0]);

1 个答案:

答案 0 :(得分:9)

编写BitSet{}时会创建一个临时对象,其类型为BitSet。但是非常量对象的std::bitset的{​​{3}}是 not constexpr!

在第一个示例中,s1隐式为const,因此它使用的是常量operator[],即constexpr

由于无法直接const限定临时人员(例如const Foo()无效),因此始终可以将const添加到别名:

using BitSet = const std::bitset<5>;