Как стать автором
Обновить

Комментарии 9

Совет N28: очень уж хотелось до чего-нибудь доколупаться, так почему бы и не доколупаться до массивов на стеке. Но почему остановились на полдороги? Нужно еще объявить вредным использование std::array, особенно в качестве членов структур-классов. Вот как увидишь такое в коде:

struct some_packet {
  std::array<unsigned char, 24> header_;
  ...
};

так смело объявляй код говном, не стесняйся!

Совет N29: да, да, это вот прямо про C++! Исключительно про C++.

Ребят, можно понять, что у вас большой опыт копания в различного рода сортах известной субстанции, но набрасывать нужно таки уметь, чтобы это было и смешно, и полезно. У вас же как-то слишком уж часто и не смешно, и не полезно;

Да, тоже 28-ой зацепил - понятно, что для всяческих входных строк char[точно_хватит] не очень, но если нужно действительно небольшое фиксированное число элементов, определямое алгоритмом (скажем, понадобилось FFT на 16 даблов), то VLA - какой-то overkill.

Наверное подразумевается, что тогда вместо магического числа будет константа, говорящая о том, что тут все расчитано, как в примере про char path[MAX_PATH].

Так наоборот народ топит ЗА использование std::array вместо обычных. Его вроде и переполнить не дадут.

Так наоборот народ топит

Автор статьи не абстрактный народ, а ув.тов. Карпов, и в совете №28 упоминания std::array я не увидел :(
Отличия std::array<char, 10> от char[10] есть, но не так, чтобы уж сильно много с точки зрения опасности переполнения.

В случае char[10] если память не травили санитайзером есть шанс поломать стэк, в std::array вроде как имеются bound checks которые гарантируют падение при обращении по индексу за пределами. Если намеренно не баловаться с сырыми указателями - переполнения случится не должно.

в std::array вроде как имеются bound checks которые гарантируют падение при обращении по индексу за пределами

И давно operator[] для std::array начал делать проверки в release?

Если намеренно не баловаться с сырыми указателями - переполнения случится не должно.

Пока для интеграции с системой используется старый-добрый Си, баловаться с сырыми указателями никто не перестанет.

Кстати, precompiled headers существуют не только для msvc. Для линукса (gcc или clang или оба, не помню уже) они тоже вполне себе работают

Кажется, что пример для совета N30 выбран не совсем удачно, ведь что новичок, что бывалый, на мой взгляд, напишут одинаково так: while ( i-- )

Зарегистрируйтесь на Хабре, чтобы оставить комментарий