以下程序无法编译:
#include <iostream>
int main() {
std::cout << R"RAW_STRING_LITERAL(
hello
world
)RAW_STRING_LITERAL";
}
错误: raw string delimiter longer than 16 characters
。
为什么对原始字符串分隔符施加限制长度?
以下程序无法编译:
#include <iostream>
int main() {
std::cout << R"RAW_STRING_LITERAL(
hello
world
)RAW_STRING_LITERAL";
}
错误: raw string delimiter longer than 16 characters
。
为什么对原始字符串分隔符施加限制长度?
我能找到的最初的原始字符串文字提案是 N2146 作者:Beman Dawes。它包含文字:
最大长度 d-炭序列 应为16个字符。
这似乎是作者施加的任意限制,他可能决定16个字符足以在所有情况下创建明确的分隔符序列。
该提案还指出
终止 d-炭序列 原始字符串文字的字符串应与初始字符串的字符序列相同 d-炭序列
因此,符合要求的实现必须缓冲和处理 d-炭序列 确保两个序列匹配。没有任何限制 d-炭序列 会不必要地增加实现功能的复杂性。
该标准规定:
在前缀中具有R的字符串文字是原始字符串文字。 d-char序列用作分隔符。终止 原始字符串的d-char序列与字符序列相同 最初的d-charsequence。 d-char序列最多应包含一个 16个字符
http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4527.pdf §2.13.5第28页
标准中没有给出任何理由,但对我来说,这似乎是完全随机的限制,因为它应该使分隔符完全没有区别。