我有一段代码,如下所示:
constexpr gsl::cstring_span<> const somestring{"Hello, I am a string"};
并且它拒绝编译,并显示一条消息,提示某些非 constexpr 函数正在某处调用。
这是为什么呢?这似乎是需要支持的最重要的用例。重点是如果可能的话,进行编译时边界检查。涉及常量字符串文字的编译时边界检查似乎是它最常使用的事情。但如果不能将其声明为 constexpr,则不会发生这种情况。这是怎么回事?
最佳答案
我认为问题在于字符串文字具有 const char 类型数组并且以 null 结尾。但谁会说您正在从一个以 null 结尾的数组构造您的 cstring_span
呢?
因为cstring_span
的构造函数会进行物理检查以删除空终止符(如果存在),否则接受数组的完整长度。
我不确定 constexpr 表达式有多强大,但它可能可以以 constexpr
方式实现它。您可以在这里创建一个问题来询问它:
关于c++ - gsl::cstring_span 不支持 constexpr 吗?如果没有,我为什么要使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52434153/