C ++ 17 основан на C17? - PullRequest
0 голосов
/ 17 мая 2019

Я заметил, что многие новые функции в C ++ 17 были из C17. Есть ли связь между этими двумя стандартами? Есть ли практические различия между функциями C и их эквивалентами в C ++?

Ответы [ 2 ]

9 голосов
/ 17 мая 2019

Является ли C ++ 17 основанным на C17?

Нормативный справочник по C ++ на текущий моментрабочий проект - C11 .

Если сейчас это C11, то это было самое позднее C11 для C ++ 17.101

Вот соответствующее предложение (хотя я не уверен, что именно это предложение было принято).


Я заметилчто многие из новых функций в C ++ 17 были из C17.

У меня нет.Я не сравнивал два.Если аналогичные функции были добавлены к обоим, это, вероятно, совпадение.Тем не менее, поскольку C17 на самом деле было просто «исправлением ошибки», обновление C11 кажется маловероятным.

Существует ли какая-либо связь между двумя стандартами?

Не совсем,нет.Конечно, две рабочие группы будут общаться друг с другом, но оба языка независимы.

Существуют ли какие-либо практические различия между функциями C и их эквивалентами в C ++?

Без конкретных примеров я не могу сказать, но опять же, вы должны рассматривать их как отдельные и независимые вещи.

C ++ только «основан на» C с точки зрения библиотечных и языковых возможностей, которые он «наследует»».Однако обратите внимание, что это не оптовый импорт C11 в C ++ 17; это не так, как это работает .


Кстати, хотя термин «C17» является приемлемым (и широко распространенным) названием для него, и хотя его макрос __STDC_VERSION__ является201710L, это действительно"C18" (и технически ISO / IEC 9899: 2018 ).

(ср. C ++ 98's __cplusplusэто 199711L; именно так иногда и срабатывает время, когда публикация слегка растягивается на следующий год после того, как такие вещи были согласованы и заморожены.)

5 голосов
/ 17 мая 2019

Начиная с C ++ 17, стандарт C ++ относится к C11 (это предложение было принято для части C ++ 17 в 2016 году ), а не C17. Но я бы не назвал это «на основе».

Кроме того, стандарты C ++ и C разрабатываются различными рабочими группами, которые на самом деле не пересекаются, поэтому между ними нет прямой связи (хотя есть некоторая попытка сохранить синхронизацию функций C и C ++, когда это легко сделать). / имеет смысл).

...