gsl :: cstring_span不支持constexpr吗?如果没有,我为什么要使用它?

时间:2018-09-20 22:23:19

标签: c++ cpp-core-guidelines ms-gsl

我有一段看起来像这样的代码:

constexpr gsl::cstring_span<> const somestring{"Hello, I am a string"};

,它拒绝编译并显示一条消息,抱怨某些非constexpr函数在某处被调用。

这是为什么?这似乎是最重要的用例。关键是要进行编译时边界检查。涉及常量字符串文字的编译时限检查似乎是最常使用的事情。但是,如果不能将其声明为constexpr,则不会发生这种情况。这是怎么回事?

1 个答案:

答案 0 :(得分:2)

我认为问题在于字符串文字的类型数组为const char,并且以空值结尾。但是谁会说您是从以空值终止的数组构造cstring_span呢?

因为cstring_span的构造函数进行了物理检查,以删除空终止符(如果存在),否则接受数组的整个长度。

我不确定constexpr表达式的功能有多强大,但是 可能以constexpr的方式实现。您可以在此处提出问题:

https://github.com/Microsoft/GSL/issues