3

在 C++11 标准 16.2.5 中:

实现应为由一个或多个非数字或数字 (2.11) 后跟句点 (.) 和单个非数字组成的序列提供唯一映射。第一个字符不能是数字。该实现可能会忽略字母大小写的区别。

我完全不明白这句话的上下文或含义?

“提供独特的映射”是什么意思?从什么映射到什么?和独特的相对于什么?什么序列?

它似乎与周围的段落完全无关。

4

2 回答 2

3

在典型情况下,您在#include指令中指定的是文件名。这就是说它不必是文件名。“from what”是指令中的字符序列(h-char-sequenceq-char-sequence)。这可以映射到相同类型数据的某些(或多或少任意)源——例如,如果一个实现想要将标题存储在某种数据库中,它可能会将它们映射到数据库中的记录。

至于“到什么”部分,它故意含糊不清——典型的实现使用文件名,但它几乎可以是其他任何东西,只要包含标题会产生正确类型的结果——上面提到的数据库记录会是一种可能性,但它旨在允许诸如预编译头文件之类的事情,甚至将标准头文件的“知识”构建到编译器本身中,因此包含标准头文件可能只会在编译器中设置一个标志来告诉它请注意该标题的内容。

于 2013-02-22T00:18:31.740 回答
2

我不认为这是不合逻辑的,“序列”是指和对或对之间的q-char-sequenceh-char-sequence<>"

措辞直接来自 C 标准(仅稍作改动),该标准在 6.4.7 中有以下附加措辞:

两种形式的头文件名中的序列都以实现定义的方式映射到 6.10.2 中指定的头文件或外部源文件名。

后面的措辞在这种情况下更有意义。

我相信这确实意味着实现只需要支持该形式的包含文件和标题。这显然并不意味着#include <vector>不起作用,因为该措辞并没有说实现不应支持其他形式,并且还有其他措辞要求标头正常运行。

于 2013-02-22T00:52:39.503 回答