Много typos и небольших правок (#124)

* Update comparison_operator_rewrite.md: typos

* Update default_default_constructor.md: typos

Не уверен насчёт добавления `2D` к Point. По смыслу, вроде бы, нужно

* Update shared_from_this.md

* Update function_pass_and_address_restriction.md

* Update enable_if_void_t.md

* Update static_initialization_order_fiasco.md

* Update uninitialized.md

* Update ownership_and_exceptions.md

* Update vptr.md
This commit is contained in:
Aleksandr
2025-04-29 02:00:42 +03:00
committed by GitHub
parent b38daaf0ff
commit 034dc9504b
9 changed files with 23 additions and 24 deletions
+4 -4
View File
@@ -1,6 +1,6 @@
# Конструктор по умолчанию и = default
Гайдлайны по современному C++ всячески намекают, а иногда напрямую советуют: [следуюйте "правилу нуля" (rule of zero)](https://en.cppreference.com/w/cpp/language/rule_of_three) для ваших классов, и структур и будет вам счастье! Используйте инициализацторы по умолчанию! C++20 улучшил поддержку структур-аггрегатов, так что не надо писать вручную конструкторы там где это не надо... Но legacy код существут, его затратно переписывать... А также существуют legacy разработчики, которые застряли в C++98...
Гайдлайны по современному C++ всячески намекают, а иногда напрямую советуют: [следуйте "правилу нуля" (rule of zero)](https://en.cppreference.com/w/cpp/language/rule_of_three) для ваших классов, и структур и будет вам счастье! Используйте инициализаторы по умолчанию! C++20 улучшил поддержку структур-аггрегатов, так что не надо писать вручную конструкторы там где это не надо... Но legacy код существует, его затратно переписывать... А также существуют legacy разработчики, которые застряли в C++98...
Так что в старых кодовых базах можно встретить что-нибудь такое:
@@ -12,7 +12,7 @@ public:
Point2D(int _x, int _y);
// Раз добавили какой-то конструктор,
// нужно добавить и конструктор по умолчанию
Point();
Point2D();
int x;
int y;
@@ -24,7 +24,7 @@ public:
// Point.cpp
Point2D::Point2D(int _x, int _y) : x {_x}, y {_y} {}
// И даже такие!
Point::Point2D() = default;
Point2D::Point2D() = default;
```
Делать так в современном C++ крайне не рекомендуется. Не только из-за обилия бессмысленного бойлерплейта, но и из-за риска получить неинициализированные поля и неопределенное поведение вместе с ними.
@@ -143,4 +143,4 @@ private:
Все компилируется, но логгер по умолчанию перестает работать, а `= default` сбивает программиста с толку.
Инициализируйте поля явно! Всегда, кроме случаев, когда инициализация действительно становится проблемой для производительности.
Инициализируйте поля явно! Всегда, кроме случаев, когда инициализация действительно становится проблемой для производительности.