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

Tre*_*key 11 c++ string-literals rawstring c++14 c++17

以下程序无法编译:

#include <iostream>

int main() {
    std::cout << R"RAW_STRING_LITERAL(
        hello
        world
        )RAW_STRING_LITERAL";
}
Run Code Online (Sandbox Code Playgroud)

错误: raw string delimiter longer than 16 characters.

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

Pra*_*ian 10

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

d-char序列的最大长度应为16个字符.

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

该提案还指出

原始字符串文字的终止d-char序列应与初始d-char序列的字符序列相同

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