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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΎΠ΅ руководство ΠΏΠΎ C++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 11

Автор Π‘ΡŒΡΡ€Π½ Бтраустрап

Если ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, выполняСмыС Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹Π±ΠΎΡ€Π°, Π½Π΅ приводят ΠΊ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π°ΠΌ управлСния, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ "ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌ case ΠΈ default" бСспрСпятствСнно. Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° break (см. Β§R.6.6.1).

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ, Π±Ρ‹Π²Π°Π΅Ρ‚ составным. Описания ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ. Однако ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½ΠΈΠΆΠ΅ описания, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±Ρ‹Π»Π° явная ΠΈΠ»ΠΈ нСявная инициализация, считаСтся Π½Π΅Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΌ, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ описаниС Π½Π΅ находится Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обходится (Ρ‚.Π΅. ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ обходится ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ управлСния, Β§R.6.7). ΠžΡ‚ΡΡŽΠ΄Π° слСдуСт, Ρ‡Ρ‚ΠΎ описаниС с явной ΠΈΠ»ΠΈ нСявной ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅.

R.6.5 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ†ΠΈΠΊΠ»Π°

Π­Ρ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π·Π°Π΄Π°ΡŽΡ‚ Π²ΠΈΠ΄Ρ‹ Ρ†ΠΈΠΊΠ»Π°.

ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-Ρ†ΠΈΠΊΠ»Π°:

 while ( Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ) ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

 do ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ while ( Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ )

 for ( ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-ΠΈΠ½ΠΈΡ† Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ opt ; Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ opt ) ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-ΠΈΠ½ΠΈΡ†:

 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-описаниС

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ конструкция ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-ΠΈΠ½ΠΈΡ† кончаСтся Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅-Ρ†ΠΈΠΊΠ»Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ описаниСм.

R.6.5.1 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ while

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ while Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ выполняСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния Π½Π΅ станСт Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° происходит ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ арифмСтичСского Ρ‚ΠΈΠΏΠ°, ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° указатСля, ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° класс, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сущСствуСт ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² арифмСтичСский Ρ‚ΠΈΠΏ ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ указатСля (Β§R.12.3).

R.6.5.2 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ do

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ do Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ выполняСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния Π½Π΅ станСт Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° происходит послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ арифмСтичСского Ρ‚ΠΈΠΏΠ°, ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° указатСля, ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ° класс, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сущСствуСт ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² арифмСтичСский Ρ‚ΠΈΠΏ ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ указатСля (Β§R.12.3).

R.6.5.3 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for

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

 for ( ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-ΠΈΠ½ΠΈΡ† Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-1 opt ; Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-2 opt ) ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

эквивалСнтСн конструкции

ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-ΠΈΠ½ΠΈΡ†

while ( Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-1 ) {

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

 Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-2 ;

}

Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ for Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-2 ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ вычислСниС выраТСния-1. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π°Π΄Π°Π΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ для Ρ†ΠΈΠΊΠ»Π°, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ шагом Ρ†ΠΈΠΊΠ»Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ становится Π½ΡƒΠ»Π΅ΠΌ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅, ΠΈ ΠΎΠ½ΠΎ добавляСтся послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ шага Ρ†ΠΈΠΊΠ»Π°. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ арифмСтичСский Ρ‚ΠΈΠΏ, ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ указатСля, ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏ класса, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сущСствуСт ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ арифмСтичСскому Ρ‚ΠΈΠΏΡƒ ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΡƒ указатСля (Β§R.12.3).

ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΠ±Π° выраТСния. Если отсутствуСт Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-1, Ρ‚ΠΎ эквивалСнтный Ρ†ΠΈΠΊΠ» с while ΠΈΠΌΠ΅Π΅Ρ‚ условиС while(1).

Если ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-ΠΈΠ½ΠΈΡ† являСтся описаниСм, ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈΠΌΠ΅Π½, описанных Π² Π½Π΅ΠΌ, простираСтся Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π±Π»ΠΎΠΊΠ°, Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for.

R.6.6 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π΄Π΅Π»Π°ΡŽΡ‚ Π±Π΅Π·ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ управлСния.

ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°:

 break ;

 continue ;

 return Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ opt ;

 goto ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ;

По Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· области видимости (ΠΊΠ°ΠΊΠΈΠΌ Π±Ρ‹ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ это Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ) Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ дСструкторы (Β§R.12.4) для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² классов, построСнных Π² этой области, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½Ρ‹. Π­Ρ‚ΠΎ относится ΠΊΠ°ΠΊ ΠΊ явно описанным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ, Ρ‚Π°ΠΊ ΠΈ ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ (Β§R.12.2).

R.6.6.1 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅, ΠΎΠ½ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΡŽ блиТайшСго ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰ΠΈΡ… Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ нСпосрСдствСнно Π·Π° Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ, Ссли Ρ‚Π°ΠΊΠΎΠΉ Π΅ΡΡ‚ΡŒ.

R.6.6.2 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ управлСния Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ блиТайшСго ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΌΠ»ΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ†ΠΈΠΊΠ»Π°, Ρ‚.Π΅. Π² ΠΊΠΎΠ½Π΅Ρ† Ρ†ΠΈΠΊΠ»Π°. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

    while (foo) {      do  {           for (;;) {

    // ...             // ...          // ...

    contin: ;          contin: ;       contin: ;

    }                  } while (foo);  }

ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue, Π½Π΅ относящийся ΠΊΠΎ внСшним ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ Ρ†ΠΈΠΊΠ»Π°, эквивалСнтСн ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ goto contin.

R.6.6.3 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΡƒΡŽΡΡ ΠΊ Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ происходит с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° return.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return Π±Π΅Π· выраТСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² функциях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚.Π΅. Π² функциях, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° void, ΠΈΠ»ΠΈ Π² конструкторах (Β§R.12.1) ΠΈ дСструкторах (Β§R.12.4). ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return с Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² функциях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния пСрСдаСтся Π² Ρ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ,которая Π²Ρ‹Π·Π²Π°Π»Π° Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Если Π½ΡƒΠΆΠ½ΠΎ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прСобразуСтся ΠΊ Ρ‚ΠΈΠΏΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся return, ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ конструктора ΠΈΠ»ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (Β§R.12.2). Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠ½Ρ†Ρƒ эквивалСнтСн Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Ρƒ Π±Π΅Π· Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, Ρ‡Ρ‚ΠΎ являСтся Π½Π΅Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΌ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

R.6.6.4 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ goto

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ goto бСзусловно ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ (Β§R.6.1), находящСйся Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

R.6.7 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ описания

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ описания Π·Π°Π²ΠΎΠ΄ΠΈΡ‚ Π² Π±Π»ΠΎΠΊΠ΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-описания:

 ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅

Если ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ описания, ΡƒΠΆΠ΅ Π±Ρ‹Π» Ρ€Π°Π½Π΅Π΅ описан Π²ΠΎ внСшнСм Π±Π»ΠΎΠΊΠ΅, внСшнСС описаниС становится скрытым Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π±Π»ΠΎΠΊΠ°, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΎ ΠΎΠΏΡΡ‚ΡŒ вступаСт Π² силу.

ВсС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ автоматичСских (auto) ΠΈ рСгистровых (register) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… производятся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° выполняСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-описаниС. Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, описанных Π² Π±Π»ΠΎΠΊΠ΅, происходит ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· Π±Π»ΠΎΠΊΠ° (Β§R.6.6). Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ автоматичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² Ρ†ΠΈΠΊΠ»Π΅, происходит Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС Ρ†ΠΈΠΊΠ»Π°. НапримСр, пСрСмСнная Index j создаСтся ΠΈ уничтоТаСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎ i:

for (int i = 0; iβ€Ή100; i++)

 for (Index j = 0; jβ€Ή100; j++) {

  //…

 }

Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ ΠΈΠ· Π±Π»ΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, минуя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ автоматичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΡŽ автоматичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, описанных Π² Ρ‚ΠΎΡ‡ΠΊΠ΅, ΠΎΡ‚ΠΊΡƒΠ΄Π° происходит ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Π½ΠΎ Π½Π΅ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅, ΠΊΡƒΠ΄Π° происходит ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² Π±Π»ΠΎΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ пропуску ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. БчитаСтся Π½Π΅Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, обходящий описаниС с явной ΠΈΠ»ΠΈ нСявной ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ случаСв, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ находится Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Π±Π»ΠΎΠΊΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пропускаСтся (Ρ‚.Π΅. Π² Π½Π΅Π³ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅) ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ происходит ΠΈΠ· Ρ‚ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π³Π΄Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° инициализация ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. НапримСр,

void f()

{

 //…

 goto lx; // ошибка: ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, минуя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ

 //…

 ly:

 X a = 1;

 //…

 lx:

 goto ly; // Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Π·Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²

 // дСструктора для `a'

}

АвтоматичСская пСрСмСнная, которая Π±Ρ‹Π»Π° создана ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ условии, уничтоТаСтся ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этого условия, ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ доступна Π²Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ этого условия. НапримСр,

if (i)

 for (int j = 0; jβ€Ή100; j++) {

  //…

 }

if (j !=100) // ошибка: ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π²Π½Π΅ условия

 //…

;

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ локального ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с классом памяти static (Β§R.7.1.1) производится ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΅Π³ΠΎ описания. Если статичСская пСрСмСнная инициализируСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ являСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ-константой, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Ρ…ΠΎΠ΄ΠΎΠΌ Π² Π±Π»ΠΎΠΊ происходит стандартная инициализация Π½ΡƒΠ»Π΅ΠΌ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ (Β§R.8.4).

ДСструктор для локального статичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли пСрСмСнная Π±Ρ‹Π»Π° создана с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструктора. ДСструктор Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ сразу ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ составная Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… Π² atexit() (Β§R.3.4).

R.6.8 Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ нСоднозначности

БущСствуСт Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Π² Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ΅ языка, ΠΊΠ°ΡΠ°ΡŽΡ‰Π°ΡΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°-выраТСния ΠΈ описания, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, содСрТащий ΠΊΠ°ΠΊ самоС Π»Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ явноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°, Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС (Β§R.5.2.3), ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΌ ΠΎΡ‚ описания, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ начинаСтся со (. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ считаСтся описаниСм.