为什么原始字符串字面值的分隔符必须小于16个字符
Why must the delimiters of raw string literals be under 16 chars?
以下程序无法编译:
#include <iostream>
int main() {
std::cout << R"RAW_STRING_LITERAL(
hello
world
)RAW_STRING_LITERAL";
}
error: raw string delimiter longer than 16 characters
。
为什么对原始字符串分隔符施加长度限制?
我能找到的最早的原始字符串文字提案是Beman Dawes的N2146。它包含以下文本:
d-char-sequence的最大长度为16个字符。
这似乎是作者强加的任意限制,他可能认为16个字符足以在所有情况下创建一个明确的分隔符序列。
提案还规定
所以一个符合标准的实现必须缓冲和处理d-char-sequence以确保两个序列匹配。对d-char-sequence没有任何限制将不必要地增加实现该功能的复杂性。原始字符串字面值的终止d-char-sequence应与初始d-char-sequence
相同的字符序列
标准规定:
前缀有R的字符串字面值是原始字符串字面值。d-char-sequence用作分隔符。的终止原始字符串的D-char-sequence与初始的d字符序列。一个字符序列最多包含16个字符
http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4527.pdf§2.13.5页28
标准中没有给出原因,但对我来说,这似乎是完全随机的限制,因为它应该对分隔符是什么没有任何影响。
相关文章:
- 将stl字符串缩小到小于15个字符的容量
- 更改高度贴图,使其在 4x4 网格上显示 16 个 hieghtmap
- 为什么在我的实现中,所有数组都对齐到 16 个字节?
- AES-128 CFB-8解密的前16个字节已损坏
- 如何在没有同步的情况下使用多个线程(2、4,8、16 个线程)在循环(10,100、1000 个周期)中打印字符串?
- 为什么对小于 4 个字节的整数类型的位操作会发生意外行为?
- 在手臂霓虹灯中有效地重新洗牌和组合 16 个 3 位数字
- 为什么使用 .replace 运算符时字符串的长度不超过 16 个字符?
- 为什么 unordered_map::equal_range upper_bound 如果键小于第一个映射元素,则返回
- 为什么分配的变量地址之间相差 16 个字节?
- 如何创建 std::vector of char/std::byte,其中第一个字节对齐到 16 个字节,但没有填充
- 将分配的前 16 个字节的内存强制转换为 UDT
- _declSpec(Align(16))不将指针与16个字节对齐
- 是否可以安全地假设64位指针中的16个高位(2个对我来说足够了)是未设置的
- 字符串具有 16 个或更多元素时的分段错误
- 在 C 语言中将 32 位 int 块连接在 16 个字符数组中
- Windows Shell 扩展:当选择超过 16 个文件时,上下文菜单
- AES解密仅适用于前16个字符
- AES CBC 加密/解密仅解密前 16 个字节
- 为什么原始字符串字面值的分隔符必须小于16个字符