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

Ale*_*sky 4 c++ c++17

std :: bitset有constexpr构造函数和constexpr运算符[],所以下面的代码编译成功:

#include <bitset>

typedef std::bitset<5> BitSet;

constexpr BitSet s1;
static_assert(!s1[0]);
Run Code Online (Sandbox Code Playgroud)

为什么以下代码没有?

static_assert(BitSet{}[0]);
Run Code Online (Sandbox Code Playgroud)

Rak*_*111 9

在编写BitSet{}临时对象时,会创建其类型为的对象BitSet.但std::bitsetoperator[]非const对象是 constexpr!

在你的第一个例子s1是含蓄const,所以它使用的常量operator[]constexpr.

由于您不能const直接限定临时(如const Foo()无效),您可以随时添加const到您的别名:

using BitSet = const std::bitset<5>;
Run Code Online (Sandbox Code Playgroud)