6

我最近在 C11 中进行了探索,许多新功能使我更容易在 C 中编写代码。我想知道 C++11 正式支持所有这些功能。我关心的不是实现或编译器问题,而是新的 C++ 标准。

4

3 回答 3

5

No, C++11 does not support ALL the features of C11. It does not even support all the features of C99. Variable-length arrays, for example, were introduced in C99, but C++ does not yet support them. See this question for details.

于 2013-09-05T23:54:11.837 回答
2

在主要的新增功能中,有两个在 C11 和 C++11 之间共享:线程和原子。我认为新的内存排序模型也在两者之间共享,但我对 C++11 的了解还不够好,无法肯定地断言。

C11 的一个主要新增功能可能永远不会被 C++ 共享:使用_Generic. 对于它的许多用例,特别是函数重载,已经有 C++ 结构实现了它。C++ 未涵盖其他更复杂的用例,例如检测编译时整数常量表达式。C++1 有constexpr,但除了名称可能暗示这不是确定表达式是否为常量表达式的工具,而是指定对象或函数返回是常量。为这两种情况(常量和非常量)生成完全不同的代码似乎是不可能的。

C++ 中的主要用例不仅_Generic不需要这些,而且在预处理阶段也严重依赖宏编程。由于 C++ 社区的大部分人不赞成宏,因此肯定不会达成共识。

于 2013-09-06T05:49:04.327 回答
1

C++11 标准引用了 C99 标准,特别是对于 C 标准库。

C++11 支持 C99 中的部分(但不是全部)功能,但 C90 中不支持。(某些特定于 C99 的特性在 C++ 中得到不同的支持,或者被认为不合适。)

C11 在 C99 的基础上增加了一些特性;大多数这些新特性也没有添加到 C++ 中。

一个值得注意的例外是线程支持(<threads.h>在 C11 中,<thread>在 C++11 中)。我没有仔细研究过这个,不知道它们有多相似。

(C11 还提供了一些新特性,以及一些 C99 特性,可选;这也没有反映在 C++ 中。)

于 2013-09-06T00:00:15.793 回答