C ++ 11是否支持C11的新功能?

时间:2013-09-05 23:45:11

标签: c++ c c++11 c11

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

3 个答案:

答案 0 :(得分:5)

不,C ++ 11不支持C11的所有功能。它甚至不支持C99的所有功能。例如,可变长度数组在C99中引入,但C ++尚不支持它们。有关详细信息,请参阅this question

答案 1 :(得分:2)

在主要的添加中,有两个在C11和C ++ 11之间共享:线程和原子。我认为新的内存排序模型在两者之间是共享的,但我不太清楚C ++ 11是否足够肯定地断言。

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

不仅C ++中的主要用例不需要_Generic,它还在预处理阶段严重依赖于宏编程。由于宏被C ++社区的大部分人所厌恶,因此肯定不会达成共识。

答案 2 :(得分:1)

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

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

C11在C99之上增加了许多功能;大多数新功能 not 也被添加到C ++中。

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

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