C++ 第 1 阶段源文件字符翻译集:C++11 之前与 C++11 之后、C++23 之前

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

cppreference 的 关于翻译阶段的页面 ,对于翻译的第 1 阶段(C++23 之前),在其步骤 2 中有一个注释:

接受的源文件字符集是实现定义的 (C++11 起)

这也反映在规范的工作草案中(例如,对于 C++20)

鉴于在 C++23 之前,源代码文件的字节如何映射到基本源字符集的字符似乎总是实现定义的,从 C++11 开始添加上述规则是为了实现?即拥有它与不拥有它的净变化是多少?这可能只是一个阅读理解问题,但对我来说似乎不清楚,因为它接着说:

任何无法映射到基本源字符集中的字符的源文件字符都将替换为其通用字符名称(使用 \u 或 \U 转义)或某种等效处理的实现定义的形式。

例如,C++11 添加是否意味着由实现来确定哪些字符甚至考虑映射到基本源字符集或通用字符名称(即允许跳过源文件并且根本不翻译它们)?否则,通过上面关于映射到基本源字符或通用字符名称或等效项的观点,我不清楚这个 C++11 规则在该 cppreference 页面上第 1 阶段的第 1 步之外实现了什么,即:

源代码文件的各个字节被映射(以实现定义的方式)到基本源字符集的字符

c++ c++11 translation c++23 implementation-defined-behavior
1个回答
0
投票

在 C++11 之前,唯一直接可用的字符是基本源字符集中的字符,其他字符需要转义。

自 C++11 起,由实现定义除了基本源字符集之外哪些字符无需转义即可使用,以及哪些字符可以转义。

自 C++23 起,所有 unicode 字符均可使用而无需转义。

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