繁体   English   中英

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

[英]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::bitsetoperator[] 不是 constexpr!

在你的第一个例子中, s1是隐式const ,所以它使用const operator[] ,它是constexpr

既然你不能const直接晋级临时(如const Foo()是无效的),你总是可以只添加const到您的别名:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM