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

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

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

ΠšΡ€ΠΎΠΌΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, стандарт Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ€ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² для использования Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, поэтому ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄Π²Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… символа подчСркивания, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с символа подчСркивания, нСпосрСдствСнно Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт прописная Π±ΡƒΠΊΠ²Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с символа подчСркивания.

БоглашСния ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

БущСствуСт мноТСство общСпринятых соглашСний для имСнования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… соглашСний ΠΌΠΎΠΆΠ΅Ρ‚ сущСствСнно ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.

β€’ Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ осмыслСнным.

β€’ Π˜ΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ состоят ΠΈΠ· строчных символов. НапримСр, index, Π° Π½Π΅ Index ΠΈΠ»ΠΈ INDEX.

β€’ Π˜ΠΌΠ΅Π½Π° классов ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с прописной Π±ΡƒΠΊΠ²Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Sales_item.

β€’ ΠΠ΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ слов Π² ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π΅ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ Π»ΠΈΠ±ΠΎ символом подчСркивания, Π»ΠΈΠ±ΠΎ прописными Π±ΡƒΠΊΠ²Π°ΠΌΠΈ Π² ΠΏΠ΅Ρ€Π²Ρ‹Ρ… символах ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ слова. НапримСр: student_loan ΠΈΠ»ΠΈ studentLoan, Π½ΠΎ Π½Π΅ studentloan.

Π‘Π°ΠΌΡ‹ΠΌ Π²Π°ΠΆΠ½Ρ‹ΠΌ аспСктом соглашСния ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ являСтся Π΅Π³ΠΎ Π½Π΅ΡƒΠΊΠΎΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ соблюдСниС.

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.12. КакиС ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅ ΠΈΠΌΠ΅Π½ нСдопустимы (Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ Π΅ΡΡ‚ΡŒ)?

(a) int double = 3.14; (b) int _;

(с) int catch-22;      (d) int 1_or_2 = 1;

(e) double Double = 3.14;

2.2.4. ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости ΠΈΠΌΠ΅Π½

Π’ любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ имя относится ΠΊ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ сущности β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΈΠΏΡƒ ΠΈ Ρ‚.Π΄. Однако имя ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ для обращСния ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ сущностям Π² Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости (scope) β€” это Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρƒ ΠΈΠΌΠ΅Π½ΠΈ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, области видимости Π² языкС Π‘++ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками.

Π’ Ρ€Π°Π·Π½Ρ‹Ρ… областях видимости Ρ‚ΠΎ ΠΆΠ΅ имя ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ сущностям. ИмСна Π²ΠΈΠ΄ΠΈΠΌΡ‹ ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΡ… объявлСния ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° области видимости, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° 1.4.2:

#include <iostream>

int main() {

 int sum = 0;

 // ΡΠ»ΠΎΠΆΠΈΡ‚ΡŒ числа ΠΎΡ‚ 1 Π΄ΠΎ 10 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ

 for (int val = 1; val <= 10; ++val)

  sum += val; // эквивалСнтно sum = sum + val

  std::cout << "Sum of 1 to 10 inclusive is "

            << sum << std::endl;

 return 0;

}

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° опрСдСляСт Ρ‚Ρ€ΠΈ ΠΈΠΌΠ΅Π½ΠΈ β€” main, sum ΠΈ val, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ имя пространства ΠΈΠΌΠ΅Π½ std, наряду с двумя ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈΠ· этого пространства ΠΈΠΌΠ΅Π½ β€” cout ΠΈ endl.

Имя main ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π²Π½Π΅ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок. Оно, ΠΊΠ°ΠΊ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠΌΠ΅Π½, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠΌΠ΅Π΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости (global scope). Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹, ΠΈΠΌΠ΅Π½Π° Π² глобальной области видимости доступны Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ. Имя sum ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π±Π»ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ являСтся Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main(). Оно доступно ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° объявлСния ΠΈ Π΄Π°Π»Π΅Π΅ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main(), Π½ΠΎ Π½Π΅ Π·Π° Π΅Π΅ ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ sum ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Π±Π»ΠΎΠΊΠ° (block scope). Имя val опрСдСляСтся Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for. Оно ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² этом ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅, Π½ΠΎ Π½Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main().

Π‘ΠΎΠ²Π΅Ρ‚. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ использовании

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠΎΠ±Π»ΠΈΠΆΠ΅ ΠΊ мСсту Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ использования. Π­Ρ‚ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ поиск опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Однако Π²Π°ΠΆΠ½Π΅ΠΉ всСго Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° пСрСмСнная опрСдСляСтся Π±Π»ΠΈΠΆΠ΅ ΠΊ мСсту Π΅Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ использования, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΅ΠΉ подходящСС исходноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ области видимости

ΠžΠ±Π»Π°ΡΡ‚ΠΈ видимости ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ области видимости. БодСрТащаяся (ΠΈΠ»ΠΈ влоТСнная) ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости называСтся Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости (inner scope), Π° содСрТащая Π΅Π΅ области видимости β€” внСшнСй ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ видимости (outer scope).

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ имя объявлСно Π² области видимости, ΠΎΠ½ΠΎ становится доступно Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Π½Π΅Π΅ областях видимости. ИмСна, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²ΠΎ внСшнСй области видимости, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области видимости:

#include <iostream>

// ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для дСмонстрации.

// ИспользованиС Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

// ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠΉ локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ - это ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ

// программирования

int reused = 42; // reused ΠΈΠΌΠ΅Π΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости

int main()

{

 int unique = 0; // unique ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Π±Π»ΠΎΠΊΠ°

 // Π²Ρ‹Π²ΠΎΠ΄ #1; ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ глобальная reused; Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 42 0

 std::cout << reused << " " << unique << std::endl;

 int reused = 0; // Π½ΠΎΠ²Ρ‹ΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ reused скрываСт

                 // Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ reused

 // Π²Ρ‹Π²ΠΎΠ΄ #2: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ локальная reused; Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 0 0

 std::cout << reused << " " << unique << std::endl;

 // Π²Ρ‹Π²ΠΎΠ΄ #3: явноС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ глобальной reused; Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 42 0

 std::cout << ::reused << " " << unique << std::endl;

 return 0;

}

Π’Ρ‹Π²ΠΎΠ΄ #1 осущСствляСтся ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ reused. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ имя reused, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π² глобальной области видимости. Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 42 0. Π’Ρ‹Π²ΠΎΠ΄ #2 происходит послС опрСдСлСния локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ reused. Π’Π΅ΠΏΠ΅Ρ€ΡŒ локальная пСрСмСнная reused находится Π² области видимости (in scope). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ reused, Π° Π½Π΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 0 0. Π’Ρ‹Π²ΠΎΠ΄ #3 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ области видимости (см. Ρ€Π°Π·Π΄Π΅Π» 1.2) для пСрСопрСдСлСния стандартных ΠΏΡ€Π°Π²ΠΈΠ» областСй видимости. Π£ глобальной области видимости Π½Π΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° области видимости пусто слСва, это ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ справа ΠΈΠΌΠ΅Π½ΠΈ Π² глобальной области видимости. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ reused ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 42 0.

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, являСтся ΠΊΡ€Π°ΠΉΠ½Π΅ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.13. Каково Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ j Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅?

int i = 42;

int main() {

 int i = 100;

 int j = i;

}

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2.14. Допустим Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄? Если Π΄Π°, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΈΠ΅ значСния ΠΎΠ½ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ Π½Π° экранС?

int i = 100, sum = 0;

for (int i = 0; i != 10; ++i)

 sum += i;

std::cout << i << " " << sum << std::endl;

2.3. БоставныС Ρ‚ΠΈΠΏΡ‹

Боставной Ρ‚ΠΈΠΏ (compound type) β€” это Ρ‚ΠΈΠΏ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π£ языка Π‘++ Π΅ΡΡ‚ΡŒ нСсколько составных Ρ‚ΠΈΠΏΠΎΠ², Π΄Π²Π° ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, ссылки ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΌΡ‹ рассмотрим Π² этой Π³Π»Π°Π²Π΅.

Π£ рассмотрСнных Π½Π° настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ объявлСний Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π»ΠΈ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ объявлСния. Π‘ΠΎΠ»Π΅Π΅ слоТныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ объявлСния ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с составными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ состоят ΠΈΠ· объявлСний Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

2.3.1. Бсылки

Бсылка (reference) являСтся Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Бсылочный Ρ‚ΠΈΠΏ "ссылаСтся Π½Π°" Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ. Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ссылочного Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ объявлСния Π² Ρ„ΠΎΡ€ΠΌΠ΅ &d, Π³Π΄Π΅ d β€” объявляСмоС имя:

int ival = 1024;

int &refVal = ival; // refVal ссылаСтся Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя, ival

int &refVal2;       // ошибка: ссылку слСдуСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° копируСтся Π² создаваСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ссылки вмСсто копирования значСния ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° происходит связываниС (bind) ссылки с Π΅Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ. ПослС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ссылка остаСтся связанной с исходным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. НСт Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ способа ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ привязку ссылки Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΡΡΡ‹Π»Π°Π»Π°ΡΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, поэтому ссылки слСдуСт ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Новый стандарт Π²Π²Π΅Π» Π½ΠΎΠ²Ρ‹ΠΉ Π²ΠΈΠ΄ ссылки β€” ссылка r-значСния (r-value reference), ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ рассмотрим Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 13.6.1. Π­Ρ‚ΠΈ ссылки ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго для использования Π² классах. Π‘ тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ссылка (reference), ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅ΠΌ ссылку l-значСния (l-value reference).

Бсылка β€” это псСвдоним

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ссылка ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π½Π΅ΠΉ фактичСски ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ связана ссылка.