c++ - gsl::cstring_span 不支持 constexpr 吗?如果不是,我为什么要使用它?
问题描述
我有一段看起来像这样的代码:
constexpr gsl::cstring_span<> const somestring{"Hello, I am a string"};
并且它拒绝编译一条消息,抱怨某处正在调用某些非 constexpr 函数。
为什么是这样?这似乎是要支持的最重要的用例。重点是尽可能检查编译时边界。涉及常量字符串文字的编译时间界限检查似乎是最常使用的东西。但是,如果不能声明,就不会发生这种情况constexpr
。这里发生了什么?
解决方案
我认为问题在于字符串文字的类型为数组const char
并且以空值结尾。但是谁说你是cstring_span
从一个以空结尾的数组构造你的呢?
因此,构造函数cstring_span
会进行物理检查以删除空终止符(如果存在),否则接受数组的全长。
我不确定constexpr
表达式有多强大,但可能以某种constexpr
方式实现它。您可以在这里创建一个问题来询问它:
推荐阅读
- sql-server - 需要创建重复索引以使查询更快
- python - 根据熊猫中的条件交换列值
- android - 如何从android中的相机获取图像
- javascript - CommanderJS - 验证参数
- java - android正则表达式提取数据的问题-日志上的PID
- javascript - javascript使函数参数动态化
- dart - 检查嵌套的 Dart Map 是否存在空值
- javascript - 在对象数组中选择唯一项
- html - 有没有办法在锚标签中有按钮,就像另一个链接?
- javascript - 如何更改“progress[value]::-webkit-progress-value”属性的颜色?