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

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

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

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

R.8.2.5 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ описании T D, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ D ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄

D1 ( список-описаний-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ) список-спСцификаций-cv opt

описываСмый ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ "…список-спСцификаций-cv функция с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° ΡΠΏΠΈΡΠΎΠΊ-описаний-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ T".

список-описаний-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

 ΡΠΏΠΈΡΠΎΠΊ-описаний-ΠΏΠ°Ρ€Π°ΠΌ opt … opt

 ΡΠΏΠΈΡΠΎΠΊ-описаний-ΠΏΠ°Ρ€Π°ΠΌ , …

список-описаний-ΠΏΠ°Ρ€Π°ΠΌ:

 ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°

 ΡΠΏΠΈΡΠΎΠΊ-описаний-ΠΏΠ°Ρ€Π°ΠΌ , описаниС-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°

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

 ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ-описания ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ

 ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ-описания ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ = Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

 ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ-описания абстрактный-ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ opt

 ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ-описания абстрактный-ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ opt = Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Если список-описаний-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ эллипсисом (…), ΠΏΡ€ΠΎ число ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² извСстно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ числа Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ссли список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² пуст, Ρ‚ΠΎ функция ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚. Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² void эквивалСнтСн пустому списку ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². НС считая этого случая, void Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° (хотя Ρ‚ΠΈΠΏΡ‹, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ ΠΈΠ· void, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ void*, допустимы).

R.8.3 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΈΠ΄

ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

 ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ-описания opt ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€-ctor Ρ‚Π΅Π»ΠΎ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ρ‚Π΅Π»ΠΎ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

 ΡΠΎΡΡ‚Π°Π²Π½ΠΎΠΉ-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΈΠ· опрСдСлСния-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ Π²ΠΈΠ΄Π°

D1 ( список-описаний-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ) список-спСцификаций-cv opt

Π² соотвСтствии с опрСдСлСниями ΠΈΠ· Β§R.8.2.5.

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ относятся ΠΊ области видимости самого большого Π±Π»ΠΎΠΊΠ° Ρ‚Π΅Π»Π°-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

int max(int a, int b, int c)

{

 int m = (a β€Ί b) ? a : b;

 return (m β€Ί c) ? m : c;

}

Π—Π΄Π΅ΡΡŒ int прСдставляСт спСцификации-описания, max(int a, int b, int c) - ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ, Π° {/*… */} - Ρ‚Π΅Π»ΠΎ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€-ctor ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² конструкторах, см. Β§R.9.3.1 ΠΈ Β§R.12.6.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ список-спСцификаций-cv ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ: Π² описании нСстатичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π°, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ нСстатичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π° ΠΈΠ»ΠΈ Π² описании указатСля Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½, см. Β§R.9.3.1. Она относится ΠΊ Ρ‚ΠΈΠΏΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π΄Π°Π²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

void print(int a, int)

{

 printf("a = %d\n",a);

}

R.8.4 Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹

Π—Π° описатСлСм ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ описываСмого ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°.

ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€:

 = Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-присваивания

 = { список-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² , opt }

 ( список-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ )

список-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²:

 Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-присваивания

 ΡΠΏΠΈΡΠΎΠΊ-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅-присваивания

 { список-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² , opt }

АвтоматичСскиС, рСгистровыС, статичСскиС ΠΈ внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ выраТСниями, содСрТащими константы ΠΈ описанныС Ρ€Π°Π½Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

int f(int);

int a = 2;

int b = f(a);

int c(b);

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Ρ‚ΠΈΠΏΠ° const T*, Ρ‚.Π΅. ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° константу T, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚ΠΈΠΏΠ° T*, Π½ΠΎ инициализация для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС Π½Π΅Π·Π°ΠΊΠΎΠ½Π½Π°. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° T ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Ρ‚ΠΈΠΏΠ° T нСзависимо ΠΎΡ‚ использования спСцификаций const ΠΈΠ»ΠΈ volatile Π² Ρ‚ΠΈΠΏΠ°Ρ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

int a;

const int b = a;

int c = b;


const int* p0 = &a;

const int* p1  =&b;

int* p2 = &b; // ошибка: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π±Π΅Π· const

 // настраиваСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ const

int *const p3 = p2;

int *const p4 = p1; // ошибка: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π±Π΅Π· const

 // настраиваСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ const

const int* p5 = p1;

Π—Π΄Π΅ΡΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΎΠ±Π΅ΠΈΡ… ошибок ΠΎΠ΄Π½Π°: Ссли Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΎΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ указатСля Π±Π΅Π· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ спСцификации Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ описано ΠΊΠ°ΠΊ const.

На выраТСния для стандартных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² накладываСтся большС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, см. Β§R.8.2.6.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² классов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкторов описываСтся Π² Β§R.12.6.1. ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² классов описываСтся Π² Β§R.12.8. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ статичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² опрСдСляСтся Π² Β§R.3.4 ΠΈ Β§R.6.7.

ГарантируСтся, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ статичСского класса памяти (Β§R.3.5), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Π² качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ 0, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ. Π’ΠΎ ΠΆΠ΅ справСдливо для статичСских Ρ‡Π»Π΅Π½ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса. ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния автоматичСских ΠΈ рСгистровых ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹.

Если ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ относится ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ арифмСтичСского Ρ‚ΠΈΠΏΠ°, ΠΎΠ½ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ выраТСния (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² скобках). Π’ качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° бСрСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния, происходят Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ прСобразования Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ ΠΈ Π² случаС присваивания.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ () Π½Π΅ являСтся ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ, описаниС

X a();

Π·Π°Π΄Π°Π΅Ρ‚ Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ a Ρ‚ΠΈΠΏΠ° класс X, Π° являСтся описаниСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ X.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ для статичСского Ρ‡Π»Π΅Π½Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ области видимости Ρ‡Π»Π΅Π½Π° класса, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

int a;


struct X {

 static int a;

 static int b;

};


int X::a = 1;

int X::b = a; // X::b = X::a

R.8.4.1 АгрСгат

АгрСгатом называСтся массив ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° класс (Β§R.9), Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ конструкторов (Β§R.12.1), частных ΠΈΠ»ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² (Β§R.11), Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов (Β§R.10) ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Β§R.10.2). Если Π°Π³Ρ€Π΅Π³Π°Ρ‚ инициализируСтся, Ρ‚ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ список-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки списка, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ запятыми, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² для Ρ‡Π»Π΅Π½ΠΎΠ² Π°Π³Ρ€Π΅Π³Π°Ρ‚Π°. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ΄ΡƒΡ‚ Π² Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΌ порядкС индСксов ΠΈΠ»ΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² Π°Π³Ρ€Π΅Π³Π°Ρ‚Π°. Если Π°Π³Ρ€Π΅Π³Π°Ρ‚ содСрТит Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π°Π³Ρ€Π΅Π³Π°Ρ‚Ρ‹, это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ примСняСтся рСкурсивно для Ρ‡Π»Π΅Π½ΠΎΠ² Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π°Π³Ρ€Π΅Π³Π°Ρ‚ΠΎΠ². Если ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² спискС мСньшС, Ρ‡Π΅ΠΌ Ρ‡Π»Π΅Π½ΠΎΠ² Π°Π³Ρ€Π΅Π³Π°Ρ‚Π°, Ρ‚ΠΎ ΠΎΠ½ дополняСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².

НапримСр, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅

struct S {int a; char* b; int c;}

S ss = {1, "asdf"};

ss.a инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 1, ss.b - "asdf", Π° ss.c - 0.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π°Π³Ρ€Π΅Π³Π°Ρ‚, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ классом, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ этого класса ΠΈΠ»ΠΈ класса, ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ Π½Π΅Π³ΠΎ (Β§R.12.8).

Π€ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Если список-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² начинаСтся Π»Π΅Π²ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобкой, Ρ‚ΠΎ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми, Π·Π°Π΄Π°Π΅Ρ‚ значСния Ρ‡Π»Π΅Π½Π°ΠΌ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π°, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ считаСтся ошибкой, Ссли ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² большС, Ρ‡Π΅ΠΌ Ρ‡Π»Π΅Π½ΠΎΠ². Π˜Π½Π°Ρ‡Π΅, Ссли список-ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ Π°Π³Ρ€Π΅Π³Π°Ρ‚ Π½Π΅ начинаСтся Π»Π΅Π²ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобкой, Ρ‚ΠΎ ΠΈΠ· списка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΎΠ΅ число элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π°; всС ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ элСмСнты ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π°Π³Ρ€Π΅Π³Π°Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π»ΠΎΠΆΠ΅Π½ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π°Π³Ρ€Π΅Π³Π°Ρ‚.

НапримСр, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ

int x[] = {1, 3, 5};

массив x инициализируСтся ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· Ρ‚Ρ€Π΅Ρ… элСмСнтов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Ρ‚Ρ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠ»Π½ΠΎΠΉ скобочной структурой.

float y[4][3] = {

 {1, 3, 5},

 {2, 4, 6},

 {3, 5, 7},

};

Π—Π΄Π΅ΡΡŒ значСния 1, 3, 5 ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку массива y[0], Ρ‚.Π΅. y[0][0], y[0][1] ΠΈ y[0][2]. Аналогично, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π΅ строки ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ y[1] ΠΈ y[2]. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, поэтому y[3] инициализируСтся нулями. Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:

float y[4][3] = {

 1, 3, 5, 2, 4, 6, 3, 5, 7,

};

ПослСдний (самый ΠΏΡ€Π°Π²Ρ‹ΠΉ) индСкс измСняСтся быстрСС всСго.

Π’ послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ для y начинаСтся Π»Π΅Π²ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобкой, Π½ΠΎ для y[0] скобки Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ, поэтому ΠΈΠ· списка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Ρ€ΠΈ элСмСнта, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎ Ρ‚Ρ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнта ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для y[1] ΠΈ y[2]. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅

float y[4][3] = {

 {1}, {2}, {3}, {4}

};

инициализируСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ столбСц y (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ рассматриваСтся ΠΊΠ°ΠΊ Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив), Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ столбцы ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0.