为什么原始字符串文字的分隔符必须低于16个字符?

时间:2015-08-04 20:04:10

标签: c++ c++14 string-literals c++17 rawstring

以下程序无法编译:

#include <iostream>

int main() {
    std::cout << R"RAW_STRING_LITERAL(
        hello
        world
        )RAW_STRING_LITERAL";
}

错误: raw string delimiter longer than 16 characters

为什么对原始字符串分隔符施加限制长度?

2 个答案:

答案 0 :(得分:10)

我能找到的关于原始字符串文字的最早提议是Beman Dawes的N2146。它包含文字:

  

d-char-sequence 的最大长度为16个字符。

这似乎是作者施加的任意限制,他可能决定16个字符足以在所有情况下创建明确的分隔符序列。

该提案还声明

  

原始字符串文字的终止 d-char-sequence 应与初始 d-char-sequence

的字符序列相同

因此,符合要求的实现必须缓冲并处理 d-char-sequence 以确保两个序列匹配。对 d-char-sequence 没有任何限制会不必要地增加实现该功能的复杂性。

答案 1 :(得分:1)

该标准规定:

  

前缀中包含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页

标准中没有给出任何理由,但对我来说,这似乎是完全随机的限制,因为它应该使分隔符完全没有区别。