12

以下程序无法编译:

#include <iostream>

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

错误: raw string delimiter longer than 16 characters

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

4

2 回答 2

10

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

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

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

该提案还指出

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

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

于 2015-08-04T20:35:15.923 回答
1

该标准规定:

前缀中有 R 的字符串文字是原始字符串文字。d-char-sequence 用作分隔符。原始字符串的终止 d-char-sequence 是与初始 d-charsequence 相同的字符序列。d-char-sequence 最多包含 16 个字符

http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4527.pdf § 2.13.5 第 28 页

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

于 2015-08-04T20:22:26.887 回答