我有一段看起来像这样的代码:
constexpr gsl::cstring_span<> const somestring{"Hello, I am a string"};
,它拒绝编译并显示一条消息,抱怨某些非constexpr函数在某处被调用。
这是为什么?这似乎是最重要的用例。关键是要进行编译时边界检查。涉及常量字符串文字的编译时限检查似乎是最常使用的事情。但是,如果不能将其声明为constexpr
,则不会发生这种情况。这是怎么回事?
答案 0 :(得分:2)
我认为问题在于字符串文字的类型数组为const char
,并且以空值结尾。但是谁会说您是从以空值终止的数组构造cstring_span
呢?
因为cstring_span
的构造函数进行了物理检查,以删除空终止符(如果存在),否则接受数组的整个长度。
我不确定constexpr
表达式的功能有多强大,但是 可能以constexpr
的方式实现。您可以在此处提出问题: