C++11 是否支持 C11 的新功能?
Does C++11 support new features of C11?
我最近在 C11 中进行了探索,许多新功能使我更容易用 C 语言编码。我想知道 C++11 是否正式支持所有这些功能。我关心的不是实现或编译器问题,而是新的C++标准。
不,C++11 不支持 C11 的所有功能。它甚至不支持C99的所有功能。例如,C99 中引入了可变长度数组,但 C++ 尚不支持它们。有关详细信息,请参阅此问题。
在主要的新增功能中,C11和C++11之间共享两个:线程和原子学。我认为新的记忆排序模型也在两者之间共享,但我不太了解 C++11 来肯定地断言这一点。
C11 的一个主要补充可能永远不会被C++共享:使用 _Generic
键入泛型表达式。对于许多用例,特别是函数重载,已经有C++构造来实现这一点。 C++不包括其他更复杂的用例,例如检测编译时整数常量表达式。C++1 有 constexpr
,但除了名称之外,这可能表明这不是确定表达式是否为常量表达式的工具,而是指定对象或函数返回为常量的工具。为这两种情况(常量和非常量)生成完全不同的代码似乎是不可能的。
C++中的主要用例不仅不需要_Generic
,而且还严重依赖于预处理阶段的宏编程。由于宏被C++社区的大部分人所反对,因此肯定不会达成共识。
C++11标准引用了C99标准,特别是C标准库。
C++11 支持 C99 中但不是全部功能,但不支持 C90 中的功能。(某些特定于 C99 的功能要么在C++中得到不同的支持,要么被认为不合适。
C11在C99之上添加了许多功能;大多数新功能也没有添加到C++中。
一个值得注意的例外是线程支持(C11 中<threads.h>
,C++11 中<thread>
)。我没有仔细研究过,不知道它们有多相似。
(C11 还将其一些新功能以及一些 C99 功能设为可选;这也没有反映在C++中。
- c++20[[no.unique_address]]中的新功能是什么
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 重载算子新功能的限制
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- 如何组织 git 工作流以修复错误并同时引入新功能
- 新功能"synchronized"块在C++中提供了什么优势?
- C++17 'inline variable' vs 'extern' 关键字继承自 C 的新功能
- 如何制作新功能并将其传递到另一个功能
- 我不能在函数中使用新功能C++构建
- 是否可以保证C++标准库容器调用可替换的新功能
- 向类添加新功能
- 具有新功能的 C++ 动态分配
- 避免每次要引入新功能时都使用新类
- Linux 中的新功能后没有变化
- C++11 是否支持 C11 的新功能?
- C++中的新功能语法
- 用户定义分配器的非标准库放置新功能
- 为什么 C++ 中的新功能在失败时不返回 NULL。
- 我正在使用放置新功能和虚拟功能;为什么我的虚拟功能表有误?
- linux的新功能:C++打开和关闭usb端口的问题