[英]For using a standard library function in C++, what exactly is the relationship between its header file and std namespace?
[英]Relationship between C and C++ standard library
这个问题与编程或特定的语言概念没有直接关系。 我的问题是我们是否可以使用对C
国际标准(例如C11
)的引用来提供规范性参考来描述C++
C
库中的任何概念。
更具体地说,在N3797::18.3.3 [c.limits]
定义的标题<climits>
中描述了C library
标题。 但是C
标准提供了有关<limits.h>
内容的更全面的信息,而不是N3797
工作草案。
所以对一切C library
中定义的C11
是真正的C++
中定义的实现C++11
的C library
或者我们不能依赖于什么C
标准规定?
对于C标准库, C ++回退到C标准,对于C ++ 11,它回退到C99而不是C11,在C ++ 11之前引用的C标准是C90。 1.2
规范性参考文献中对此进行了说明:
以下参考文件对于本文件的应用是必不可少的。 凡是注日期的引用文件,仅引用的版本适用。 凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本标准。
包括:
ISO / IEC 9899:1999,编程语言 - C.
ISO / IEC 9899:1999 / Cor.1:2001(E),编程语言 - C,技术勘误1
ISO / IEC 9899:1999 / Cor.2:2004(E),编程语言 - C,技术勘误2
ISO / IEC 9899:1999 / Cor.3:2007(E),编程语言 - C,技术勘误3
并且还说:
ISO / IEC 9899:1999的第7条和ISO / IEC 9899:1999 / Cor.1:2001的第7条以及ISO / IEC 9899:1999 / Cor.2:2003的第7条中描述的库在下文中称为C标准库。 1
C ++标准使用术语C标准库来引用C99和TC,并将明确说明C ++与C的不同之处。
和第17.2
节C标准库说:
- C ++标准库还提供C标准库的功能,经过适当调整以确保静态类型安全。
- 许多库函数的描述依赖于C标准库来获取这些函数的签名和语义。 在所有这些情况下,应省略对限制限定符的任何使用。
与C标准库name.h文件相对应的cname头文件包含在17.6.1.2
Headers中 ,其中包括:
除第18条至第30条和附件D中所述外,每个标题cname的内容应与C标准库(1.2)或C Unicode TR中指定的相应标题name.h的内容相同。 ,好像通过包含。 但是,在C ++标准库中,声明(除了在C中定义为宏的名称除外)都在命名空间std的命名空间范围(3.3.6)内。 未指定是否首先在全局命名空间范围内声明这些名称,然后通过显式使用声明将其注入命名空间std(7.3.3)
与limits.h
相关的climits
内容将在第18.3.3
节中介绍,并说:
内容与标准C库头相同。 [注意:宏中定义的常量类型不需要与宏引用的类型相匹配。-end note]
请注意,正如我在上面的注释中所提到的,规范性引用并未作为一个整体,C ++标准必须明确引用它以适用于C ++标准的规范性引用。 请参阅我们是否可以将未明确引用的内容应用于C ++标准的规范性引用? 更多细节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.