Адрес канала:
Категории:
Образование
Язык: Русский
Количество подписчиков:
16
Описание канала:
Канал посвященный моим попыткам освоить C и немного компиляторы. Буду сюда кидать интересные для меня вещи.
Рейтинги и Отзывы
Оценить канал cplusplustudy и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.
5 звезд
2
4 звезд
1
3 звезд
0
2 звезд
0
1 звезд
0
Последние сообщения
2022-10-16 23:09:30
https://telegra.ph/Predkompilirovannye-zagolovki-10-16
16 views20:09
2022-09-10 23:32:59
https://telegra.ph/C-Kompilyaciya-Preprocessor-09-10
45 views20:32
2022-09-04 22:18:13
https://telegra.ph/C-compilation-part-1-09-04
278 views19:18
2022-09-03 21:41:05
Еще одна проблема с переходом на низкоуровневые языки — операции с указателями (pointer).
Про это знают, наверно, все программисты, но иногда случаются ситуации, в которых с первого раза и не предположить подводных камней.
Рассмотрим следующий код:
vector
v;
v.push_back(1);
cout << v[0] << " ";
int *p = &*(--v.end());
(*p) = 2;
cout << v[0] << " ";
(*p) = 3;
cout << v[0] << " ";
Данный код выведет на экран значения:
1 2 3
Казалось бы все как мы и предполагали.
Проблема данного кода в том, что вектор совершенно не гарантирует что данные будут все время лежать в одной и той же области памяти. В случае изменения размера — стандартная библиотека может переложить элементы в новую область памяти.
Давайте немного поменяем исходный код:
vector v;
v.reserve(1);
v.push_back(1);
cout << v[0] << " ";
int *p = &*(--v.end());
(*p) = 2;
cout << v[0] << " ";
v.reserve(3);
(*p) = 3;
cout << v[0] << " ";
В лучшем случае эта вариация выведет на экран: 1 2 2, так как мы запишем последнее изменение в область памяти уже не имеющей отношения к вектору.
В худшем же случае данный код просто упадет в попытке произвести запись в ненадлежащий сегмент.
77 viewsedited 18:41
2022-01-24 00:20:49
https://en.cppreference.com/w/cpp/filesystem/exists
Когда только начинаешь учить С++ после высокоуровневых языка самое забавное — насколько иногда простые вещи в этом языке сложно исполнять.
К примеру функция проверки существования файла на диске в стандартную библиотеку была добавлена только в стандарте 2017го года. До этого приходилось извращаться со всякими:
ifstream f(name.c_str());
return f.good();
65 viewsedited 21:20
2022-01-24 00:18:24
Channel photo updated
21:18