ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΡ‘Π½
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹
ДСйствия

ΠšΠ»Π°ΡΡΡ‹

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈΠ· cppreference.com
 
C++
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° компилятором
АвтономныС ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ
Π―Π·Ρ‹ΠΊ
Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°
Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
ВрСбования ΠΊ имСнованию
ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ тСстирования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (C++20)
ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° языка
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΎΠ² (C++20)
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° мСтапрограммирования (C++11)
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° диагностики
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΠ±Ρ‰ΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° строк
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² (C++20)
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ²
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° числСнных Π΄Π°Π½Π½Ρ‹Ρ…
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ
РСгулярныС выраТСния (C++11)
АтомарныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (C++11)
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΠΈ (C++11)
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы (C++17)
ВСхничСскиС спСцификации
Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ символов
Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
 
 
ΠšΠ»Π°ΡΡΡ‹
ΠžΠ±Ρ‰Π΅Π΅
ΠžΠ±Π·ΠΎΡ€
Π’ΠΈΠΏΡ‹ class/struct
Π’ΠΈΠΏΡ‹ union
Π’Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ имя класса
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…
БтатичСскиС элСмСнты
Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ this
Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹
Π‘ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля
using-объявлСния
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ-элСмСнты
Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа ΠΊ элСмСнтам
ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ списки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² элСмСнтов
Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ элСмСнта ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (C++11)
Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ friend
Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ explicit
ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ прСобразования
Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-элСмСнты
ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ копирования
ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ пСрСмСщСния (C++11)
ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ (C++11)
ДСструктор
НаслСдованиС
Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ классы
ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ пустой Π±Π°Π·Ρ‹ (EBO)
Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-элСмСнты
Чисто Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ абстрактныС классы
Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ override (C++11)
Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ final (C++11)
 

Класс это ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ‚ΠΈΠΏ.

Π’ΠΈΠΏ класса опрСдСляСтся спСцификатором класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ появляСтся Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ-спСцификаторов-объявлСния синтаксиса объявлСния. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ объявлСниС класса для синтаксиса спСцификатора класса.

Класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ элСмСнтов:

1) элСмСнты Π΄Π°Π½Π½Ρ‹Ρ…:
2) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-элСмСнты:
3) Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹:
a) Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ классы ΠΈ пСрСчислСния, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса
b) псСвдонимы ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ объявлСний typedef ΠΈΠ»ΠΈ псСвдонимов Ρ‚ΠΈΠΏΠΎΠ² (начиная с C++11)
c) имя класса Π² Π΅Π³ΠΎ собствСнном ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ дСйствуСт ΠΊΠ°ΠΊ псСвдоним ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ элСмСнта для Ρ†Π΅Π»Π΅ΠΉ поиска (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ случаСв, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для имСнования конструктора): это извСстно ΠΊΠ°ΠΊ Π²Π½Π΅Π΄Ρ€Ρ‘Π½Π½ΠΎΠ΅-имя-класса
4) пСрСчислитСли ΠΈΠ· всСх пСрСчислСний Π±Π΅Π· области видимости, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Π² классС, ΠΈΠ»ΠΈ прСдставлСнных using-объявлСниями ΠΈΠ»ΠΈ using enum объявлСниями (начиная с C++20)
5) ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ элСмСнтов (ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, (начиная с C++14)ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ классов ΠΈΠ»ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ) ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² Ρ‚Π΅Π»Π΅ любого нСлокального класса/структуры/объСдинСния.

ВсС элСмСнты ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ сразу Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса, ΠΈΡ… нСльзя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ класс (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ элСмСнтов пространств ΠΈΠΌΡ‘Π½)

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса T Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ T Π² качСствС своСго ΠΈΠΌΠ΅Π½ΠΈ, Ссли элСмСнт

  • статичСский элСмСнт Π΄Π°Π½Π½Ρ‹Ρ…,
  • функция-элСмСнт,
  • Ρ‚ΠΈΠΏ элСмСнт,
  • шаблон элСмСнт,
  • ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ пСрСчислСния (Ссли пСрСчислСниС Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости) (начиная с C++11), ΠΈΠ»ΠΈ
  • элСмСнт Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ объСдинСния, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΌΡΡ элСмСнтом.

Однако нСстатичСский элСмСнт Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя T, Ссли Π½Π΅Ρ‚ конструкторов, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Класс с хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠΉ объявлСнной ΠΈΠ»ΠΈ унаслСдованной virtual Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ-элСмСнтом являСтся ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого Ρ‚ΠΈΠΏΠ° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Ρ…Ρ€Π°Π½ΡΡ‰ΡƒΡŽΡΡ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ прСдставлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ dynamic_cast ΠΈ typeid. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-элСмСнты ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² динамичСском связывании.

Класс с хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠΉ объявлСнной ΠΈΠ»ΠΈ унаслСдованной чистой Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ-элСмСнтом являСтся абстрактным классом. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ этого Ρ‚ΠΈΠΏΠ° Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ созданы.

Класс с constexpr конструктором являСтся LiteralType: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ этого Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ constexpr Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²ΠΎ врСмя компиляции.

(начиная с C++11)

Бвойства классов

Π’Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ класс

Π’Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ класс это класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ

  • ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ нСудаляСмый конструктор копирования, конструктор пСрСмСщСния, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания копирования ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания пСрСмСщСния
  • ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ конструктор копирования являСтся Π»ΠΈΠ±ΠΎ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ»ΠΈ удаляСмый
  • ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ конструктор пСрСмСщСния Π»ΠΈΠ±ΠΎ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Π»ΠΈΠ±ΠΎ удаляСмый
  • ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π»ΠΈΠ±ΠΎ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Π»ΠΈΠ±ΠΎ удаляСмый
  • ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π»ΠΈΠ±ΠΎ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Π»ΠΈΠ±ΠΎ удаляСмый, ΠΈ
  • ΠΈΠΌΠ΅Π΅Ρ‚ нСудаляСмый Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ дСструктор.
(Π΄ΠΎ C++20)
(начиная с C++20)


Π’Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс

Π’Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс это класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ

  • Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ копируСтся, ΠΈ
  • ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько конструкторов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π»ΠΈΠ±ΠΎ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Π»ΠΈΠ±ΠΎ удаляСмый, ΠΈ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ… Π½Π΅ удаляСмый
(Π΄ΠΎ C++20)
(начиная с C++20)


Класс со стандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ

Класс со стандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ это класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ

  • Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСстатичСских элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° класса с нСстандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ (ΠΈΠ»ΠΈ массива Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²) ΠΈΠ»ΠΈ ссылки Π½Π° Π½Π΅Π³ΠΎ
  • Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов,
  • ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа для всСх нСстатичСских элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ…,
  • Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов с нСстандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ,
  • Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ класс Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ нСстатичСскиС элСмСнты Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ
  • ΠΠ΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ нСстатичСский элСмСнт Π΄Π°Π½Π½Ρ‹Ρ…. Или, Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ: для класса S, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ элСмСнт мноТСства Ρ‚ΠΈΠΏΠΎΠ² M(S) Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса, Π³Π΄Π΅ M(X) для Ρ‚ΠΈΠΏΠ° X опрСдСляСтся ΠΊΠ°ΠΊ:
  • Если X являСтся Ρ‚ΠΈΠΏΠΎΠΌ класса Π½Π΅ объСдинСния Π±Π΅Π· (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, унаслСдованных) нСстатичСских элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ…, мноТСство M(X) пусто.
  • Если X являСтся Ρ‚ΠΈΠΏΠΎΠΌ класса Π½Π΅ объСдинСния, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ нСстатичСский элСмСнт Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ X0 (Π³Π΄Π΅ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ элСмСнт ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌ объСдинСниСм), мноТСство M(X) состоит ΠΈΠ· X0 ΠΈ элСмСнтов M(X0).
  • Если X являСтся Ρ‚ΠΈΠΏΠΎΠΌ объСдинСния, мноТСство M(X) являСтся объСдинСниСм всСх M(Ui) ΠΈ Π½Π°Π±ΠΎΡ€Π°, содСрТащСго всС Ui, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ui являСтся Ρ‚ΠΈΠΏΠΎΠΌ i-Π³ΠΎ нСстатичСского элСмСнта Π΄Π°Π½Π½Ρ‹Ρ… X.
  • Если X являСтся Ρ‚ΠΈΠΏΠΎΠΌ массива с Ρ‚ΠΈΠΏΠΎΠΌ элСмСнтов Xe, мноТСство M(X) состоит ΠΈΠ· Xe ΠΈ элСмСнтов M(Xe).
  • Если X Π½Π΅ относится ΠΊ Ρ‚ΠΈΠΏΡƒ класса ΠΈ массива, мноТСство M(X) пусто.
(начиная с C++11)


Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° со стандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ это класс со стандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова struct ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class. ОбъСдинСниС со стандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ это класс со стандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова union. }}


Класс с нСявным Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ

Класс с нСявным Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ это класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ

  • являСтся Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΠΌ, дСструктор ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ объявлСн ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (Π΄ΠΎ C++11)прСдоставляСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (начиная с C++11), ΠΈΠ»ΠΈ
  • ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ допустимый конструктор ΠΈ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ нСудаляСмый дСструктор.
(начиная с C++20)


Класс POD

Класс POD это класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ

  • являСтся Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½Ρ‹ΠΌ,
  • Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ объявлСнного ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ,
  • Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ дСструктора, объявлСнного ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΈ
  • Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСстатичСских элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΎΡ‚ класса POD (ΠΈΠ»ΠΈ массива Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²) ΠΈΠ»ΠΈ ссылки Π½Π° Π½Π΅Π³ΠΎ.
(Π΄ΠΎ C++11)
  • Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ класс,
  • являСтся классом со стандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΈ
  • Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСстатичСских элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΎΡ‚ класса POD (ΠΈΠ»ΠΈ массива Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ²).
(начиная с C++11)


Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° POD это класс POD, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ объСдинСниСм. ОбъСдинСниС POD это объСдинСниС, ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ классом POD.

ИспользованиС свойства POD устарСло. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΊΠΎΠ΄Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ свойство ΠΈΠ»ΠΈ свойство стандартной ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Π° ΠΈΠ· Π½ΠΈΡ….

(начиная с C++20)
(Π΄ΠΎ C++20)

ΠžΡ‚Ρ‡Ρ‘Ρ‚Ρ‹ ΠΎ Π΄Π΅Ρ„Π΅ΠΊΡ‚Π°Ρ…

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния повСдСния Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ с ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ силой ΠΊ Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΌ стандартам C++:

НомСр ΠŸΡ€ΠΈΠΌΠ΅Π½Ρ‘Π½ ПовСдСниС Π² стандартС ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
CWG 148 C++98 классы POD Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅
сами ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ POD (скалярными)
ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ снято
CWG 383 C++98 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присваивания ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ дСструкторы ΠΌΠΎΠ³ΡƒΡ‚
Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² классах POD, Ссли ΠΎΠ½ΠΈ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹
Π½Π΅ допускаСтся
CWG 1363 C++11 класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠ°ΠΊ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ конструкторы ΠΏΠΎ
ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΈ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ конструкторы ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΌΠΎΠΆΠ΅Ρ‚
Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ
ΠΎΠ½ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ
CWG 1496 C++11 класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ конструкторы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹
ΠΊΠ°ΠΊ удаляСмыС, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ
ΠΎΠ½ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ
CWG 1672 C++11 класс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ классом со стандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ, Ссли ΠΎΠ½
ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько пустых Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов
это Π½Π΅ класс со стандартным
Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ
CWG 1734 C++11 Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ класс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅
удаляСмыС конструкторы копирования/пСрСмСщСния/ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹
присваивания
ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ
CWG 1813 C++11 класс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ классом со стандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ, Ссли
Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСт нСстатичСский элСмСнт
Π΄Π°Π½Π½Ρ‹Ρ…
это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ класс
со стандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ
CWG 1881 C++11 для класса со стандартным Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов
бСзымянныС Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ классС,
ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‰Π΅ΠΌ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ…
всС нСстатичСскиС элСмСнты Π΄Π°Π½Π½Ρ‹Ρ…
ΠΈ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сначала
ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ классС
CWG 1909 C++98 элСмСнт шаблон ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ имя, Ρ‡Ρ‚ΠΎ ΠΈ Π΅Π³ΠΎ класс Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ
CWG 2120 C++11 ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ M(X) ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ класса со стандартным
Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π»ΠΎ случай класса, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ
являСтся массивом
этот случай рассмотрСн Π²
ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ M(X)
CWG 2605 C++98 класс с нСявным Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΠΈΠ·Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ прСдоставлСнный
ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ дСструктор
Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ