C1x从C++继承了什么?

Joh*_*itb 17 c c++ c11

众所周知,C++都采用C语言的特性,但C语言也标准化了C++特性.C1x已经获得了完整的表达临时表(之前它只有序列点临时表).C1x也从C++ 11线程工作中获益.

我想知道C1x从C++中获得了哪些其他功能?

jus*_*tin 8

一些相似之处包括:

  • 静态断言: _Static_assert ( constant-expression , string-literal );
  • 原子支持
  • unicode支持 - 添加一些typedef(例如char16_t= uint_least16_t),文字和实用程序.
  • _Generic

_Generic实际上更像是重载而不是我们对模板的强大功能.无处不在的例子_Generic是:

#define cbrt(X) _Generic((X), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(X) 
Run Code Online (Sandbox Code Playgroud)

..但我不确定哪些是从C++明确继承的.

  • 正如您在示例中看到的那样,使用`_Generic`,tgmath.h可以再次在ISO C中实现.无论如何,它根本不是从C++中获取的,不像例如与C++和C1x共同开发的原子. (4认同)
  • @Nawaz:不,它被称为泛型,它是一个丑陋的特性,用于多年来在C++中使用函数重载的地方.例如,如果你想写`sin(x)`来调用正确的`sin`,这取决于`x`是`float`,`double`还是`long double`. (3认同)

MSa*_*ers 6

C1x(5.1.2.4)的线程部分几乎完全取自C++ 11.出于所有实际目的,诸如"冲突""原子操作"之类的术语具有相同的定义.

对齐也受到C++ 11的启发:关键字是alignof,最大对齐类型是max_align_t(std::当然,删除命名空间).