我正在写这个答案 https://stackoverflow.com/questions/5539249/why-transforms-begin-s-end-s-begin-tolower-cant-be-complied-successfu/37438120#37438120我引用了http://en.cppreference.com/w/cpp/string/byte/tolower#Parameters http://en.cppreference.com/w/cpp/string/byte/tolower#Parameters
不能表示为 unsigned char 并且不等于 EOF,行为未定义
当我去检查时我发现作者的评论是:
根据 C99 7.4/1,不能将负符号字符与任何 ctype.h 函数一起使用
作者引用了C++文档中的C99标准。这有效吗?我在 C++ 标准中找不到有关此函数定义的任何内容,因此我必须假设它是有效的。
但这让我担心有两个原因:
- 我如何知道 C++ 标准依赖于哪个版本的 C 标准?
- 有以下列表C 和 C++ 之间的差异随处可见 https://softwareengineering.stackexchange.com/questions/16390/what-are-the-fundamental-differences-between-c-and-c。如果我参考 C++ 查看 C 标准,我怎么可能知道我正在查看的区域是否已被覆盖?
对于第一个问题:
C++ 标准明确列出了它所依赖的 C 标准规范性引用文件部分。对于 C++14,[intro.refs] 1.2/1 恰好列出了 C 99:
- 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
对于第二个问题:
C++ 标准并没有隐含地包含anyC 标准的一部分;所有对 C 标准的引用都是明确的。关于 C++ 与 C 的差异的一个很好的信息来源是附录 C,C++ 标准的“兼容性”,特别是 C.1 [diff.iso]。
此外,对 C 标准库的引用分散在 C++ 标准库的描述中(C++14 中的第 17-30 章)。特别感兴趣的是:
- 17.2【library.c】,描述了C标准库的基本包含
- 第 18 章 [语言支持],描述了许多
<c:::>
C++ 标准库的标头(提供 C 标准库功能的标头)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)