Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Алгоритмы
Курсы ККДП
Дистрибутивы
Ссылки

HotLog


 
Вернуться
Тема: Чем отличается C++ и C
1
  1  Егоров Илья Валерьевич, 30 июня 2019 г. 22:20:18
      ...заций выдаст потрясающий результат: выхлоп на ассемблере будет такой же, как если бы мы использовали разные функции для разных типов.
Это лишь сводка некоторых особенностей, но похожим образом можно обосновать и многие другие.
  2  Егоров Илья Валерьевич, 30 июня 2019 г. 22:20:03
      Поясню почему вытекает целый ряд особенностей лишь из того, что были введены классы:
- Ссылки: в Си мы практически не передаем сложные структуры в качестве аргументов функций, указатели как норма, а копирование элементарных значений вроде целочисленных для производительности не критичны. В C++ мы, однако, имеем классы и структуры, которые при простой передаче по значению копируются, что связано с накладными расходами. Так как указатели опасны, были введены ссылки — более безопасный и удобный способ передачи объектов в функции.
- new и delete: malloc/calloc и free банально не умеют вызывать конструкторы и деструкторы, которые вызывать необходимо, желательно неявно.
- Исключения: если есть классы и объекты, то вполне естественно будет иметь возможность более удобного способа выявления ошибок, нежели стандартным путем "сетнуть какой-то флаг".
- Шаблоны: мы можем захотеть написать класс, умеющий работать с разными типами данных. В Си классов просто нет, а вычисления во время компиляции мы обеспечиваем себе при помощи макросов. Шаблоны вместо головоломных макросов — явление вполне ожидаемое, равно как и дальнейшие усовершенствования вроде constexpr.
- typedef: признав макросы главной болью чистого Си, имея средства в обход макросов, мы и определять свои типы безопасным образом вместо "#define bool uint_fast8_t" захотим.
- traits: вот есть у нас шаблоны. Чего еще надо? Конечно же, конкретику дать. Например, пусть у нас есть общая функция считывания данных из файла, которая может считывать разные целочисленные типы. Имеем 2 лагеря: типы знаковые и беззнаковые. Пусть мы знаем способ более быстрого считывания беззнаковых типов (нам же не нужно '-' выискивать). В стандартном Си у нас есть scanf, которому мы указываем что конкретно нужно считывать, но нам такой путь очевидно не подходит, ведь мы хотим автоматически выбирать нужный способ считывания. И тут на помощь приходит type_traits: мы можем путем обычных ветвлений задать для конкретного свойства типа конкретный метод считывания, а компилятор при этом после оптими
  3  Егоров Илья Валерьевич, 30 июня 2019 г. 21:34:45
      Достаточно вспомнить, что изначально C++ был всего лишь "Си с классами". Из этого лаконично вытекает целый ряд особенностей плюсов: traits, исключения, даже new и delete отчасти. Для большего понимания разницы можно еще и по списку хидеров стандартной библиотеки пробежаться. В целом C++ "содержит" C, ибо является его расширением, разве что некоторые мелочи из чистого C вроде определенных особенностей макросов не поддерживаются.
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2019, E-mail: admin@acmp.ru