ana*_*lyg 4 c++ language-lawyer constexpr
如果我的代码包含此constexpr字符串
constexpr char my_str[] = "hello";
Run Code Online (Sandbox Code Playgroud)
my_str包含有关其大小的信息的类型,即sizeof(my_str)常量6,可以在需要常量的任何地方使用。
那strlen(my_str)呢 是否可以/也应该将其评估为编译时常数?
这是yes的示例:https : //ideone.com/2U65bN
这是一个没有的示例:http : //coliru.stacked-crooked.com/a/8cb094776dfc5969
标准对此有何看法?当然不是“也许”吗?
21.8、1和2,在标准中说:
表 74、75、76、77、78 和 79 分别描述了标头
<cctype>、<cwctype>、<cstring>、<cwchar>、<cstdlib>(字符转换)和<cuchar>。这些头文件的内容应分别与标准 C 库头文件
<ctype.h>、<wctype.h>、<string.h>、<wchar.h>、<stdlib.h>和 C Unicode TR 头文件相同<uchar.h>,并进行以下修改:
strlen在c++中定义<cstring>。后面的修改不再提及strlen。由此,我得出结论,C++ 中的签名必须与 C 中的签名完全相同,并且由于 C 没有constexpr,因此它在技术上是不合规的。也就是说,这是不合规的事情之一,除了在一个平台上依赖它然后在另一个平台上找不到它之外,不太可能造成任何损害。
| 归档时间: |
|
| 查看次数: |
928 次 |
| 最近记录: |