我在写 this answer我引用了http://en.cppreference.com/w/cpp/string/byte/tolower#Parameters
Is not representable as unsigned char and does not equal EOF, the behavior is undefined
当我去检查时the edit that had added this phrase我发现作者的评论:
Can't use negative signed chars with any ctype.h function per C99 7.4/1
作者引用了 C++ 文档中的 C99 标准。那有效吗?我在 C++ 标准中找不到关于这个函数的定义的任何内容,所以我必须假设它是有效的。
但这有两个原因让我担心:
最佳答案
第一个问题:
C++ 标准在其规范性引用部分明确列出了它所依赖的 C 标准。对于 C++14,[intro.refs] 1.2/1 恰好列出了 C 99:
- ISO/IEC 9899:1999, Programming languages — C
- ISO/IEC 9899:1999/Cor.1:2001(E), Programming languages — C, Technical Corrigendum 1
- ISO/IEC 9899:1999/Cor.2:2004(E), Programming languages — C, Technical Corrigendum 2
- ISO/IEC 9899:1999/Cor.3:2007(E), Programming languages — C, Technical Corrigendum 3
第二个问题:
C++ 标准没有隐含地包含 C 标准的任何部分;所有对 C 标准的引用都是明确的。关于 C++ 与 C 的差异的一个很好的信息来源是附录 C,C++ 标准的“兼容性”,特别是 C.1 [diff.iso]。
此外,对 C 标准库的引用分散在 C++ 标准库的描述中(C++14 中的第 17-30 章)。特别感兴趣的可能是:
<c:::>
C++ 标准库的 header (提供 C 标准库功能的 header )。https://stackoverflow.com/questions/37614714/