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)
在编写BitSet{}临时对象时,会创建其类型为的对象BitSet.但std::bitset的operator[]非const对象是不 constexpr!
在你的第一个例子s1是含蓄const,所以它使用的常量operator[]是constexpr.
由于您不能const直接限定临时(如const Foo()无效),您可以随时添加const到您的别名:
using BitSet = const std::bitset<5>;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |