为什么原始字符串字面值的分隔符必须小于16个字符

Why must the delimiters of raw string literals be under 16 chars?

本文关键字:小于 16个 字符 分隔符 原始 字符串 字面值 为什么      更新时间:2023-10-16

以下程序无法编译:

#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

标准中没有给出原因,但对我来说,这似乎是完全随机的限制,因为它应该对分隔符是什么没有任何影响。