关于C++11至C++23前翻译阶段1字符集规则新增作用的问询
C++11翻译阶段1新增规则的作用疑问
背景
在C++23之前的编译翻译阶段1中,步骤1明确规定:
源文件的单个字节以实现定义的方式映射到基本源字符集的字符
而从C++11开始,阶段1的步骤2新增了一条规则:
接受的源文件字符集是实现定义的
这一规则在C++20的标准工作草案中也有体现。
核心问题
既然在C23之前,源文件字节到基本源字符集的映射方式本身就已经是实现定义的,那么C11新增的这条规则到底有什么本质作用?有没有这条规则的区别到底在哪?
此外还有以下衍生疑问:
- 结合步骤1的规定,这条新增规则是不是允许实现自行决定哪些字符需要映射到基本源字符集、哪些需要转为通用字符名?
- 甚至是否允许实现跳过某些源文件字符不进行翻译?
- 否则这条规则看起来和步骤1的规定相比没有新增意义。
内容的提问来源于stack exchange,提问作者mishar
相关产品推荐
相关产品推荐

