Поддерживает ли C ++ 11 новые функции C11?

Я недавно исследовал C11, и многие новые функции облегчают мне код на C. Мне интересно, ВСЕ эти функции официально поддерживаются C ++ 11. Меня беспокоит не проблема реализации или компилятора, а новый стандарт C ++.

5

Решение

Нет, C ++ 11 не поддерживает ВСЕ функции C11. Он даже не поддерживает все функции C99. Например, массивы переменной длины были введены в C99, но C ++ пока не поддерживает их. Увидеть этот вопрос для деталей.

5

Другие решения

Среди основных дополнений два поделены между C11 и C ++ 11: потоки и атомарность. Я думаю, что новая модель секвенирования памяти также используется совместно, но я недостаточно хорошо знаю C ++ 11, чтобы с уверенностью утверждать это.

C ++, вероятно, никогда не поделится одним важным дополнением к C11: типовые выражения с _Generic, Для многих случаев использования этого, в частности перегрузки функций, уже есть конструкции C ++, которые реализуют это. Другие более сложные случаи использования, такие как обнаружение целочисленных константных выражений времени компиляции, не охватываются C ++. C ++ 1 имеет constexpr, но кроме имени может указывать, что это не инструмент для определения того, является ли выражение константным выражением, а для указания того, что возвращаемый объект или функция является константой. Генерация совершенно разных кодов для двух случаев (постоянного и непостоянного) не представляется возможной.

Не только это _Generic не требуется для основных случаев использования в C ++, он также сильно зависит от макропрограммирования на этапе предварительной обработки. Поскольку макросы осуждаются большими частями сообщества C ++, добавление, которое определенно не найдет консенсуса.

2

Стандарт C ++ 11 ссылается на стандарт C99, особенно для стандартной библиотеки C.

C ++ 11 поддерживает некоторые, но не все функции, которые есть в C99, но не в C90. (Некоторые специфичные для C99 функции либо по-разному поддерживаются в C ++, либо не считаются подходящими.)

C11 добавил ряд функций поверх C99; большинство из этих новых функций были не также добавлен в C ++.

Одним заметным исключением является поддержка потоков (<threads.h> в С11, <thread> в C ++ 11). Я не посмотрел на это достаточно внимательно, чтобы понять, насколько они похожи.

(C11 также сделал некоторые из своих новых функций, а также некоторые функции C99, необязательный; это также не отражено в C ++.)

1
По вопросам рекламы [email protected]