1. Хочется укрепить понимание того, что же такое модификаторы доступа (
public, protected, private), потому что в последнее время вижу тут-там некоторое непонимание у молодых особей, изучающиъ C++. Это именно модификаторы доступа. Они всего лишь не дают напрямую обратиться к члену/методу класса. Но это не значит, что вы совсем не можете работать со скрываемыми объектами.
class A {
struct T {};
public:
T getT() { return T{}; }
};// A::T t; // ceA a;
// A::T t = a.getT(); // ceauto t = a.getT(); // okВ двух первых случаях мы напрямую пытались обращаться к типу, спрятанному за модификатором доступа (и не получилось). В третьем всё ок: мы не трогаем тип напрямую -> можем с ним работать. Причём тип лишь недоступен напрямую, но мы его видим снаружи (видимость и доступность это разные штуки).
Так же модификаторы доступа это концепция времени компиляции, потому, если не думать, можно ловить неприятные штуки:
struct A {
virtual void f() = 0;
};
struct B : A {
private:
void f() override { std::cout << 1; }
};A* a = new B();
a->f();Вроде как
f() в B помечена private, но т.к. это требование проверяется на компиляции, а виртуальные штуки работают в рантайме, будет успешно выведена единица. Кстати, интересно, могут ли статанализаторы такое трекать как говнокод🤔 Не пробовал. Но может вы потрогаете и расскажете.2. В C++11 появились типы фиксированного размера. И почему-то стало принято юзать их вместо стандартных
int, long long, и прочей братвы. Мне не очень понятно почему. Ведь вам на самом деле редко нужны типы фиксированного размера. Часто вам хватает знания, что конкретный тип удовлетворяет каким-то ограничениям сверху/снизу. И часто можно просто поставить какой-нибудь static_assert на то, что у вас CHAR_BIT равен 8 или сколько вам там нужно. Короч кмк это специфический инструмент, непонятно почему ставший popular.3. Можно почитать Женин довольно понятный пост про ABI и почему его не хотят ломать (там много ссылочек с доп инфой).