Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования C++. ΠŸΡΡ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 58

Автор Π‘Ρ‚Π΅Π½Π»ΠΈ Π›ΠΈΠΏΠΏΠΌΠ°Π½

Π›ΡŽΠ±ΠΎΠ΅ стандартноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ², ΠΊΡ€ΠΎΠΌΠ΅ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ спСцификатор const Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ static_cast. НапримСр, привСдя Ρ‚ΠΈΠΏ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΊ Ρ‚ΠΈΠΏΡƒ double, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ:

// ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ для Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ дСлСния с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ

double slope = static_cast<double>(j) / i;

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ static_cast Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΡ€ΠΈ присвоСнии значСния большСго арифмСтичСского Ρ‚ΠΈΠΏΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ мСньшСго. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ сообщаСт ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ компилятору, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ ΠΈ Π½Π΅ бСспокоимся ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€Π΅ точности. ΠŸΡ€ΠΈ присвоСнии большСго арифмСтичСского Ρ‚ΠΈΠΏΠ° ΠΌΠ΅Π½ΡŒΡˆΠ΅ΠΌΡƒ компиляторы Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π²Ρ‹Π΄Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ явном ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ сообщСниС Π½Π΅ выдаСтся.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ static_cast ΠΏΠΎΠ»Π΅Π·Π΅Π½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ компилятор Π½Π΅ выполняСт автоматичСски. НапримСр, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для получСния значСния указатСля, сохраняСмого Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ void* (см. Ρ€Π°Π·Π΄Π΅Π» 2.3.2):

void* p = &d; // ok: адрСс любого нСконстантного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚

              // Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ void*

// ok: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ void* Π½Π°Π·Π°Π΄ Π² исходный Ρ‚ΠΈΠΏ указатСля

double *dp = static_cast<double*>(p);

ПослС сохранСния адрСса Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ Ρ‚ΠΈΠΏΠ° void* ΠΌΠΎΠΆΠ½ΠΎ впослСдствии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ static_cast ΠΈ привСсти ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΊ Π΅Π³ΠΎ исходному Ρ‚ΠΈΠΏΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ привСдСния Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ адрСса. Однако слСдуСт Π±Ρ‹Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ приводится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, являСтся фактичСским Ρ‚ΠΈΠΏΠΎΠΌ этого указатСля; ΠΏΡ€ΠΈ нСсоотвСтствии Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ нСпрСдсказуСм.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ const_cast

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ const_cast измСняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ спСцификатор const Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня своСго ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° (см. Ρ€Π°Π·Π΄Π΅Π» 2.4.3):

const char *pc;

char *p = const_cast<char*>(pc); // ok: ΠΎΠ΄Π½Π°ΠΊΠΎ запись ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ p

                                 // указатСля нСпрСдсказуСма

ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‰Π΅Π΅ константный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² нСконстантный, "сбрасываСт const". ΠŸΡ€ΠΈ сбросС константности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° компилятор большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ записи Π² этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Если ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π΅ Π±Ρ‹Π» константным, использованиС привСдСния для доступа Π½Π° запись Π²ΠΏΠΎΠ»Π½Π΅ допустимо. Но ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° const_cast для записи Π² ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ константный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСпрСдсказуСмо.

Волько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ const_cast позволяСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ выраТСния. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ выраТСния ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° привСдСния закончится ошибкой компиляции. Аналогично нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ const_cast для измСнСния Ρ‚ΠΈΠΏΠ° выраТСния:

const char *cp;

// ошибка: static_cast Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ const

char *q = static_cast<char*>(cp);

static_cast<string>(cp); // ok: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π» Π² строку

const_cast<string>(cp);  // ошибка: const_cast измСняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ

                         // ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ const_cast особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π² контСкстС ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, рассматриваСмых Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 6.4.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ reinterpret_cast

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ reinterpret_cast осущСствляСт Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΡŽ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ схСмы своих ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². Рассмотрим, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅:

int *ip;

char *pc = reinterpret_cast<char*>(ip);

Никогда Π½Π΅ слСдуСт Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ фактичСским ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ pc, являСтся Ρ†Π΅Π»ΠΎΠ΅ число, Π° Π½Π΅ символ. Π›ΡŽΠ±ΠΎΠ΅ использованиС указатСля pc, ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰Π΅Π΅, Ρ‡Ρ‚ΠΎ это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, вСроятно, ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠΈΡ‚ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ Π²ΠΎ врСмя выполнСния. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, вСроятнСй всСго, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΠΎΠΌΡƒ повСдСнию Π²ΠΎ врСмя выполнСния:

string str(pc);

ИспользованиС указатСля pc для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° string β€” Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ нСбСзопасности ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° reinterpret_cast. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠ° компилятор Π½Π΅ выдаст Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ сообщСний ΠΎΠ± ошибкС. ΠŸΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ указатСля pc адрСсом Ρ‚ΠΈΠΏΠ° int компилятор Π½Π΅ выдаст Π½ΠΈ прСдупрСТдСния, Π½ΠΈ сообщСния ΠΎΠ± ошибкС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ явно ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ это ΠΈ Π½ΡƒΠΆΠ½ΠΎ. Однако любоС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ указатСля pc ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ содСрТит адрСс значСния Ρ‚ΠΈΠΏΠ° char*. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ способСн Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ фактичСски это ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΈΠΏ int. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, инициализация строки str ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ указатСля pc Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€Π°Π²ΠΎΠΌΠ΅Ρ€Π½Π°, хотя Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ бСссмыслСнна, Ссли Π½Π΅ Ρ…ΡƒΠΆΠ΅! ΠžΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΠ½ΠΎΠ³Π΄Π° Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ, особСнно Ссли ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ указатСля ip ΠΊ pc происходит Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, Π° использованиС указатСля pc для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса string β€” Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ reinterpret_cast ТСстко зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ бСзопасно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ reinterpret_cast, слСдуСт Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΎ, ΠΊΠ°ΠΊ компилятор осущСствляСт ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π² старом стилС

Π’ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях языка Π‘++ явноС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π»ΠΎ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π΄Π²ΡƒΡ… Ρ„ΠΎΡ€ΠΌ:

Ρ‚ΠΈΠΏ (Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅); // Ρ„ΠΎΡ€ΠΌΠ° записи привСдСния Π² стилС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

(Ρ‚ΠΈΠΏ) Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅; // Ρ„ΠΎΡ€ΠΌΠ° записи привСдСния Π² стилС языка Π‘

Π’ зависимости ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ старого стиля срабатываСт Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ const_cast, static_cast ΠΈΠ»ΠΈ reinterpret_cast. Π’ случаях, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ static_cast ΠΈΠ»ΠΈ const_cast, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Π² старом стилС позволяСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ привСдСния. Но Ссли Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π½Π΅ допустим, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ старого стиля срабатываСт Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ reinterpret_cast. НапримСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΠΎΡ€ΠΌΡƒ записи старого стиля, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ с использованиСм reinterpret_cast.

char *pc = (char*) ip; // ip ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΈΠΏ int

Π‘ΠΎΠ²Π΅Ρ‚. Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ привСдСния Ρ‚ΠΈΠΏΠΎΠ²

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ порядок контроля соотвСтствия Ρ‚ΠΈΠΏΠΎΠ² (см. Ρ€Π°Π·Π΄Π΅Π» 2.2), поэтому Π°Π²Ρ‚ΠΎΡ€Ρ‹ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ привСдСния Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ особСнно справСдливо для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° reinterpret_cast. Π’Π°ΠΊΠΈΠ΅ привСдСния всСгда опасны. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ const_cast ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ вСсьма ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² контСкстС ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, рассматриваСмых Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 6.4. ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° const_cast Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ привСдСния, static_cast ΠΈ dynamic_cast, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ нСчасто. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ привСдСния ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Π° нСльзя Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом. Если ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ всС ΠΆΠ΅ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΌΠ΅Ρ€Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ возникновСния ошибки, Ρ‚.Π΅. ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ случаи.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ старого стиля ΠΌΠ΅Π½Π΅Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹, Ρ‡Π΅ΠΌ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ привСдСния. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ… Π»Π΅Π³ΠΊΠΎ ΡƒΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ· Π²ΠΈΠ΄Ρƒ, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ становится Π΅Ρ‰Π΅ Ρ‚Ρ€ΡƒΠ΄Π½Π΅ΠΉ.

УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 4.11.3

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 4.36. Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ i ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int, a d β€” double, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ i *= d Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ»ΠΎΡΡŒ цСлочислСнноС ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 4.37. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΉ старого стиля Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ использовался ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ привСдСния.

int i; double d; const string *ps; char *pc; void *pv;

(a) pv = (void*)ps; (b) i = int(*pc);

(c) pv = &d;        (d) pc = (char*)pv;

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 4.38. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

double slope = static_cast<double>(j/i);

4.12. Π’Π°Π±Π»ΠΈΡ†Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

Π’Π°Π±Π»ΠΈΡ†Π° 4.4. ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ДСйствиС ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π Π°Π·Π΄Π΅Π» Π› :: Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ::имя 7.4.1   Π› :: ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости класса класс::имя 3.2.2 Π› :: ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости пространства ΠΈΠΌΠ΅Π½ пространствоимСн::имя 3.1 Π› . ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ‡Π»Π΅Π½Ρƒ класса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.Ρ‡Π»Π΅Π½ 1.5.2   Π› -> ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ‡Π»Π΅Π½Ρƒ класса pointer->Ρ‡Π»Π΅Π½ 3.4.1 Π› [] Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅[Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅] 3.5.2 Π› () Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ имя(список_Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ) 1.5.2 Π› () ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ type Ρ‚ΠΈΠΏ(список_Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ) 4.11.3 П ++ ΠŸΠΎΡΡ‚Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ l-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅++ 4.5   П -- ΠŸΠΎΡΡ‚Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ l-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅-- 4.5 П typeid Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° typeid(Ρ‚ΠΈΠΏ) 19.2.2 П typeid Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния typeid(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) 19.2.2 П Π―Π²Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² cast_имя<Ρ‚ΠΈΠΏ>(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) 4.11.3 П ++ ΠŸΡ€Π΅Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ ++l-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 4.5   П -- ΠŸΡ€Π΅Ρ„ΠΈΠΊΡΠ½Ρ‹ΠΉ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ --l-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 4.5 П ~ ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ NOT ~Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.8 П ! ЛогичСскоС NOT !Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.3 П - Π£Π½Π°Ρ€Π½Ρ‹ΠΉ минус -Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.2 П + Π£Π½Π°Ρ€Π½Ρ‹ΠΉ плюс +Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.2 П * ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ *Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 2.3.2 П & ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ адрСсу &l-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2.3.2 П () ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² (Ρ‚ΠΈΠΏ)Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.11.3 П sizeof Π Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° sizeof Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.9 П sizeof Π Π°Π·ΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠ° sizeof(Ρ‚ΠΈΠΏ) 4.9 П sizeof... Π Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² sizeof...(имя) 16.4 П new Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° new Ρ‚ΠΈΠΏ 12.1.2 П new[] Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ массива new Ρ‚ΠΈΠΏ[Ρ€Π°Π·ΠΌΠ΅Ρ€] 12.1.2 П delete ОсвобоТдСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° delete Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 12.1.2 П delete[] ОсвобоТдСниС массива delete[] Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 12.1.2 П noexcept Π‘ΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ noexcept(Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) 18.1.4 Π› ->* Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‡Π»Π΅Π½ класса ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ->*ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ_Π½Π°_Ρ‡Π»Π΅Π½ 19.4.1   Π› .* Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‡Π»Π΅Π½ класса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.*ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ_Π½Π°_Ρ‡Π»Π΅Π½ 19.4.1 Π› * Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ * Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.2   Π› / Π”Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ / Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.2 Π› % Π”Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ (остаток) Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ % Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.2 Π› + Π‘ΡƒΠΌΠΌΠ° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ + Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.2   Π› - Π Π°Π·Π½ΠΈΡ†Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ - Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.2 Π› << ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг Π²Π»Π΅Π²ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ << Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.8   Π› >> ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ сдвиг Π²ΠΏΡ€Π°Π²ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ >> Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.8 Π› < МСньшС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ < Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.3   Π› <= МСньшС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ <= Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.3 Π› > Π‘ΠΎΠ»ΡŒΡˆΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ > Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.3 Π› >= Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ >= Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.3 Π› == РавСнство Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ == Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.3   Π› != НСравСнство Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ != Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.3 Π› & ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ AND Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ & Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.8 Π› ^ ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ XOR Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ^ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.8 Π› | ΠŸΠΎΠ±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ OR Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ | Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.8 Π› && ЛогичСский AND Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ && Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.3 Π› || ЛогичСский OR Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ || Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.3 П ?: Условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ? Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ : Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.7 П = ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ l-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.4   П *=, /=, %=, БоставныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присвоСния l-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ += Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈ Ρ‚.Π΄. 4.4  П +=, -=,  4.4 П <<=, >>=, 4.4 П &=, |=, ^=  4.4 П throw ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ throw Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.6.1 Π› , Запятая Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ 4.10

РСзюмС