std :: bitset具有constexpr构造函数和constexpr运算符[],因此以下代码可以成功编译:
#include <bitset>
typedef std::bitset<5> BitSet;
constexpr BitSet s1;
static_assert(!s1[0]);
购买为什么以下代码没有?
static_assert(BitSet{}[0]);
答案 0 :(得分:9)
编写BitSet{}
时会创建一个临时对象,其类型为BitSet
。但是非常量对象的std::bitset
的{{3}}是 not constexpr!
在第一个示例中,s1
隐式为const
,因此它使用的是常量operator[]
,即constexpr
。
由于无法直接const
限定临时人员(例如const Foo()
无效),因此始终可以将const
添加到别名:
using BitSet = const std::bitset<5>;