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

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

我有一段代码,如下所示:

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

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

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

最佳答案

我认为问题在于字符串文字具有 const char 类型数组并且以 null 结尾。但谁会说您正在从一个以 null 结尾的数组构造您的 cstring_span 呢?

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

我不确定 constexpr 表达式有多强大,但它可能可以以 constexpr 方式实现它。您可以在这里创建一个问题来询问它:

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

关于c++ - gsl::cstring_span 不支持 constexpr 吗?如果没有,我为什么要使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52434153/

相关文章:

c++ - 我可以更改 Code::Blocks 自动缩进的行为吗?

c++ - Flatbuffers 验证器行为

c++ - 在模板化构造函数中调用构造函数时的有趣行为

c++ - 在这种情况下,放入 decltype(x) 以指定返回类型的语法是什么

c++ - 是否有可以与 GCC 4.9.x 一起使用的 GSL 实现?

c++ - gsl::multi_span 的用途是什么?

c++ - map 、集合等的 array_view 替代方案

c++ - 什么是 "template<class T> using owner = T;"?