Что C1x наследует от C ++? - PullRequest
17 голосов
/ 06 декабря 2011

Хорошо известно, что оба C ++ получают функции от C, но C также стандартизирует функции C ++. C1x получил временные выражения полного выражения (ранее он имел только временные точки последовательности). C1x также взял от C ++ 11 усилия по созданию потоков.

Интересно, какие другие функции C1x получил от C ++?

Ответы [ 2 ]

8 голосов
/ 06 декабря 2011

Некоторые сходства включают в себя:

  • статические утверждения: _Static_assert ( constant-expression , string-literal );
  • Атомная поддержка
  • поддержка Unicode - добавляет некоторые typedefs (например, char16_t = uint_least16_t), литералы и утилиты.
  • _Generic

_Generic действительно больше похоже на перегрузку, чем то, что у нас есть с помощью шаблонов. Вездесущий пример _Generic:

#define cbrt(X) _Generic((X), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(X) 

.. но я не уверен, какие именно унаследованы от C ++.

6 голосов
/ 06 декабря 2011

Поточная часть C1x (5.1.2.4) взята почти буквально из C ++ 11. Такие термины, как «конфликт» и «атомарные операции» имеют идентичные определения для всех практических целей.

Выравнивание также вдохновлено C ++ 11: ключевое слово alignof, а максимальный выровненный тип - max_align_t (конечно, отбрасывая пространство имен std::).

...