C++17用户定义字面量字符串序列异常行为的标准依据问询
C++中连续同类型用户定义字面量无需逗号的标准依据
这个行为的规则定义在C++标准的 [lex.ext](用户定义字面量) 章节中,核心是词法分析阶段对用户定义字面量标记的拆分逻辑:
- 当连续出现的用户定义字面量属于同一基础字面量类型(比如都是字符串字面量加后缀,或都是整数/浮点字面量加后缀)时,编译器的词法分析器会自动将它们拆分为两个独立的用户定义字面量标记,因此无需额外添加逗号分隔。
例如"foo"s"bar"s会被正确解析为两个调用:operator""s("foo")和operator""s("bar"),这是因为后缀s是标识符,词法分析器能清晰区分"foo"s和后续的"bar"s是两个独立的完整标记。 - 若连续使用的是不同基础类型的用户定义字面量(比如一个是整数字面量加后缀,一个是字符串字面量加后缀),不加逗号的话会形成无法被词法分析器正确拆分的无效标记序列,因此必须用逗号分隔才能通过编译。
内容的提问来源于stack exchange,提问作者Dewfy
相关产品推荐
相关产品推荐

