C++ 是否保证字符串文字的最小字符串长度?

问题描述 投票:0回答:1

在 C++ 中,我可以使用带有自定义分隔符的字符串文字,例如

R"str-end(...verylong...)str-end";
。当 Visual Studio 吐出编译器错误 C2026,“字符串太大,尾随字符被截断”时,我感到很惊讶,这种情况发生在

字符串长度超过 16380 个单字节字符的限制。

C++ 是否保证字符串的最小长度?

我在 C++ N4928 中查找了 [lex.string] 但没有找到任何内容。如果没有指定任何内容,我可以简单地编写一个符合标准的编译器,为每个字符串提供 C2026。我想这不是这个想法。

附件 B,[implimits],仅对连接长度有建议,但对单个字符串没有建议。

括号内的数字 建议将以下每个数量作为该数量的最小值。然而,这些数量是 仅提供指导,不确定合规性。

(2.16) -- 字符串文字 (5.13.5) 中的字符(连接后 (5.2))[65 536]。

我不是在寻找 string::max_size,但我的想象是我可以在我的代码中使用这么长的字符串。

c++ language-lawyer c++23
1个回答
0
投票

该标准没有这方面的规范要求。它建议实时实现允许字符串达到特定长度,但它没有强加任何要求。

另请注意,MSVC 的限制特别针对预连接的字符串长度。本质上,这是编译器允许您在引号之间存储的字节数。

如果您想存储大量二进制数据(作为字符串),则必须使用其他东西。

如果没有指定任何内容,我可以简单地编写一个符合标准的编译器,为每个字符串提供 C2026。

是的,你可以。有多少人会使用您的实现?

该标准不需要禁止恶意或无用的实现;市场会这么做。

© www.soinside.com 2019 - 2024. All rights reserved.