[英]Why std::bitset<5>{}[0] is not a constexpr?
std :: bitset有constexpr构造函数和constexpr运算符[],所以下面的代码编译成功:
#include <bitset>
typedef std::bitset<5> BitSet;
constexpr BitSet s1;
static_assert(!s1[0]);
为什么以下代码没有?
static_assert(BitSet{}[0]);
当您编写BitSet{}
会创建一个类型为BitSet
的临时对象。 但是对于非const对象, std::bitset
的operator[]
不是 constexpr!
在你的第一个例子中, s1
是隐式const
,所以它使用const operator[]
,它是constexpr
。
既然你不能const
直接晋级临时(如const Foo()
是无效的),你总是可以只添加const
到您的别名:
using BitSet = const std::bitset<5>;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.