C/C++

Самые значительные различия С и С++ ( Кроме наличия ООП )

Самые значительные различия С и С++ ( Кроме наличия ООП )
шаблоны, пространства имен, исключения, перегрузка операторов, автоматический вывод типа выражения, константные выражения, вычисяемые во время компиляции, ссылки, лямбды, возможность создать пользовательскую ошибку компиляции, умные указатели.
Ровшан Халматов
Ровшан Халматов
25 107
Лучший ответ
Когда речь идёт о различии языков, то следует отличать реализации на самом языке, к которым относится стандартная библиотека. Например исключения – это библиотечные шаблоны, определённые в пространстве имён std::exception, а пользовательские исключения являются наследниками базового библиотечных классов. А это уже ООП по определению. И так о различиях.

Объявление и реализация типов, включая базовые:

int n = int();
n += 10;
for (int i = 0; i < n; ++i) { ; }

Встроенный булевой тип:

bool a = true;
bool b = false;

Константность:

const size_t n = 10;
int box[n];

Перегрузка функций:

void fn() { ; }
void fn(int x) { ; }

Передача и возвращение параметров по ссылкам:

void pow2(double& x) { x *= x; }
const int& fn(int& x, int y) { return x += y; }

Выделение и освобождение памяти в куче и nullptr

size_t n = 15;
int* ptr = new int[n];
delete[] ptr;
ptr = nullptr;

Пространства имён: namespace
Объявления: using

using namespace std;
using ullong_t = unsigned long long;

Шаблоны функций:

template<typename T> T fn(T x) { return x *= x; }
Almat&aidana Zhumukenovy
Almat&aidana Zhumukenovy
51 582
Стандартная библиотека
SO
Serdar Ozturk
68 836
Особо никакой разницы, ибо С++ стабильно всё ворует (пардон, "обновляет") из стандартных библиотек Си и GNU Си :))
Не знаю насколько такие различия значительны, но то, что они сразу бросаются в глаза - это точно!
Первые же команды препроцессора разные.
B Си:
#include <stdio.h>
#include <math.h>
В Си++:
#include <iostream>
#include <cmath>
В плюсах есть пространство имён, например:
using namespace std;
А где оно в чистом Си?
Динамические массивы в Си и плюсах создаются и уничтожаются по разному. В плюсах это new/delete, а никакие не маллок/фри.
Даже функции из одного модуля (c)math работают по разному: в плюсах берёшь модуль вещественного числа abs(x) и никаких проблем не возникает, а в Си для этого обязательно нужен какой-то fabs. Зато форматный вывод в Си мне больше нравится, он даже из Си в Питон перекочевал!
И ещё: в плюсах подсистема Си работает. Вот возьму на С++ да напишу:
#include <stdio.h>
int main()
{ int a, b; printf("a b : "); scanf("%d%d", &a,&b); printf("%d × %d = %d",a,b,a*b); return 0; }
И всё будет работать. А попробуй в системе программирования на чистом Си написать что-то на плюсах и сразу всё застопорится.
в плюсах по идее оверхед по памяти есть, и он немаленький; да и боилерплейт кода там хватает
Олег Злодеев
Олег Злодеев
15 114
Namespacы, templatы, reinterpret_cast и т. п., перегрузка функций, лямбда-функции, отсутствие утечек памяти на каждой компиляции, максимум какой-нибудь std::bad_alloc из за того что указал индекс в векторе, в котором меньше элементов, чем этот индекс. Красота короче. Если про классы не говорить, то это наверное всё. Разве что ещё тип данных строка, которую не надо реаллочить вручную и богатая std, у Си намного меньше