mirror of
https://github.com/Nekrolm/ubbook.git
synced 2026-06-23 13:26:42 +03:00
Много 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:
@@ -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` сбивает программиста с толку.
|
||||
|
||||
Инициализируйте поля явно! Всегда, кроме случаев, когда инициализация действительно становится проблемой для производительности.
|
||||
Инициализируйте поля явно! Всегда, кроме случаев, когда инициализация действительно становится проблемой для производительности.
|
||||
|
||||
Reference in New Issue
Block a user