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