【问题标题】:What does C1x inherit from C++?C1x 从 C++ 继承了什么?
【发布时间】:2011-12-06 08:49:34
【问题描述】:

众所周知,C++ 都继承了 C 的特性,但 C 也标准化了 C++ 的特性。 C1x 获得了完整的表达临时性(以前它只有序列点临时性)。 C1x 也借鉴了 C++11 线程工作。

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

【问题讨论】:

  • +1。我也想知道。
  • This wikipedia article 似乎是一个不错的链接。不过,我不知道 C1x 存在的动机是什么。
  • 伙计们,这个问题不想知道“它什么时候会降落,我能期待什么?”。你想有人知道那些预期的特性是从 C++ 继承的!我至少不知道。

标签: c++ c c11


【解决方案1】:

一些相似之处包括:

  • 静态断言:_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) 

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

【讨论】:

  • 泛型?你是说模板?
  • @Nawaz:不,它被称为泛型,这是一个丑陋的特性,用于多年来在 C++ 中使用函数重载的地方。例如。如果你想写sin(x)来调用正确的sin,这取决于xfloatdouble还是long double
  • @Nawaz ybungalobill 回答得很好 =) 但我会举一个例子来减少混淆。
  • @ybungalobill:感谢您的迷你介绍。 C1x的泛型可以用于Stack、Queue等数据结构的泛型实现吗?
  • 正如您在示例中看到的那样,使用_Generic,tgmath.h 可以再次在 ISO C 中实现。无论如何,它根本不是从 C++ 中获取的,不像例如原子学,它是考虑到 C++ 和 C1x 共同开发的。
【解决方案2】:

C1x (5.1.2.4) 的线程部分几乎完全取自 C++11。出于所有实际目的,“冲突”“原子操作” 等术语具有相同的定义。

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

【讨论】:

    猜你喜欢
    • 2018-07-21
    • 2012-09-29
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 2013-11-30
    • 2011-08-20
    相关资源
    最近更新 更多