c++ - C 和 C++ 标准之间的关系是什么?

我在写 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++ 标准中找不到关于这个函数的定义的任何内容,所以我必须假设它是有效的。

但这有两个原因让我担心:

  1. 我如何知道 C++ 标准依赖于哪个 C 标准版本?
  2. 有the discrepancies between C and C++ everywhere的列表.如果我引用 C++ 查看 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 章)。特别感兴趣的可能是:

  • 17.2 [library.c],它描述了 C 标准库的基本包含
  • 第 18 章 [language.support],其中描述了许多 <c:::> C++ 标准库的 header (提供 C 标准库功能的 header )。

https://stackoverflow.com/questions/37614714/

相关文章:

c++ - 特殊情况: Is & faster than %?

c++ - 如何轻松查看 C/C++ #include 图?

c++ - C++ 异常处理如何转化为机器码

c++ - std::this_thread::yield() 与 std::this_thread

c++ - C++ 中是否存在比 long long int 更大的类型?

c++ - 将多个参数传递到 std::thread

c++ - 我真的需要为 const 对象实现用户提供的构造函数吗?

c++ - std::atomic 是否正常工作?

c++ - 我必须明确调用原子加载/存储吗?

c++ - 在函数模板中使用静态局部变量的地址作为类型标识符是否安全?