Π‘ ΡΡΠ΅ΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ argc ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 5, a argv β ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ Π² ΡΡΠΈΠ»Π΅ Π‘:
argv[0] = "prog"; // ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΏΡΡΡΡΡ ΡΡΡΠΎΠΊΡ
argv[1] = "-d";
argv[2] = "-o";
argv[3] = "ofile";
argv[4] = "data0";
argv[5] = 0;
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ argv ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° argv[1]; ΡΠ»Π΅ΠΌΠ΅Π½Ρ argv[0] ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π° Π½Π΅ Π²Π²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π° 6.2.5Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.25. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ main(), ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠΎΠ½ΠΊΠ°ΡΠ΅Π½ΠΈΡΡΠΉΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈ Π²ΡΠ²Π΅Π΄ΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΡΡΠΎΠΊΡ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.26. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΏΠΎΡΠΎΠ±Π½Π° ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. ΠΡΠΎΠ±ΡΠ°Π·ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ main().
6.2.6. Π€ΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
ΠΠ½ΠΎΠ³Π΄Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π·Π°ΡΠ°Π½Π΅Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ³Π»Π° Π±Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠ²ΠΎΠ΄ΡΡΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ , ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ. ΠΠ°ΠΌ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΡΡΠΎΠ±Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ ΡΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ°Π·Π½ΡΠΌ Π²ΠΈΠ΄Π°ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ .
ΠΠΎΠ²ΡΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²: Π΅ΡΠ»ΠΈ Ρ Π²ΡΠ΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠΏ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° initializer_list. ΠΡΠ»ΠΈ ΡΠΈΠΏΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·Π½ΡΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΊΠ°ΠΊ ΡΠ°Π±Π»ΠΎΠ½ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² (variadic template), ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 16.4.
Π ΡΠ·ΡΠΊΠ΅ Π‘++ Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΠΏ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΠ΅, ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΠΈΠΉΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΡ Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. ΠΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π‘.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠΏΠ° initializer_listΠ€ΡΠ½ΠΊΡΠΈΡ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° initializer_list. Π’ΠΈΠΏ initializer_list β ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ² (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 3.5) Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΡΠΎΡ ΡΠΈΠΏ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ initializer_list. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΊΠ»Π°ΡΡΠΎΠΌ initializer_list, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π² ΡΠ°Π±Π». 6.1.
Π’Π°Π±Π»ΠΈΡΠ° 6.1. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΊΠ»Π°ΡΡΠΎΠΌ initializer_list
initializer_list<T> lst; ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ; ΠΏΡΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠΏΠ° T initializer_list<T> lst{a,b,Ρ...}; lst ΠΈΠΌΠ΅Π΅Ρ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ²; ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΏΠΈΡΠΌΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ². ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ° β ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ lst2(lst) lst2 = lst ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ°. initializer_list Π½Π΅ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅. ΠΠΎΡΠ»Π΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΈ ΠΊΠΎΠΏΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ lst.size() ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅ lst.begin() lst.end() ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ lstΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΈΠΏΡ vector, ΡΠΈΠΏ initializer_list ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 3.3). ΠΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° initializer_list ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΠΈΠΏ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΏΠΈΡΠΎΠΊ:
initializer_list<string> ls; // initializer_list ΡΡΡΠΎΠΊ
initializer_list<int> li; // initializer_list ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π»
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π²Π΅ΠΊΡΠΎΡΠ°, ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ° initializer_list Π²ΡΠ΅Π³Π΄Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ; Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
void error_msg(initializer_list<string> il) {
for (auto beg = il.begin(); beg != il.end(); ++beg)
cout << *beg << " ";
cout << endl;
}
ΠΠ΅ΡΠΎΠ΄Ρ begin() ΠΈ end() ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ° initializer_list Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΡΠ°ΠΊΠΎΠ²ΡΠΌ Ρ ΠΊΠ»Π°ΡΡΠ° vector (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 3.4.1). ΠΠ΅ΡΠΎΠ΄ begin() ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°, Π° ΠΌΠ΅ΡΠΎΠ΄ end() β Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ. ΠΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ beg ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ° initializer_list. Π ΡΠ΅Π»Π΅ ΡΠΈΠΊΠ»Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ beg, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ ΡΠΈΠΏΠ° initializer_list ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΊΠ»ΡΡΠΈΡΡ Π² ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ:
// expected ΠΈ actual - ΡΡΡΠΎΠΊΠΈ
if (expected != actual)
error_msg({"functionX", expected, actual});
else
error_msg({"functionX", "okay"});
ΠΠ΄Π΅ΡΡ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ error_msg() ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° ΠΏΡΠΈ Π²ΡΠΎΡΠΎΠΌ β Π΄Π²Π°.
Π£ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ initializer_list ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΌΠΎΠ³ Π±Ρ Π±ΡΡΡ ΠΊΠ»Π°ΡΡ ErrCode, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²ΠΈΠ΄Ρ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ²ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠΏΠΈΡΠΊΡ initializer_list ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° ErrCode ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
void error_msg(ErrCode Π΅, initializer_list<string> il) {
cout << e.msg() << ": ";
for (const auto &elem : il)
cout << elem << " ";
cout << endl;
}
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ»Π°ΡΡ initializer_list ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π½Ρ begin() ΠΈ end(), ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ΅ΡΠΈΠΉΠ½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ for (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 5.4.3). ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ°Ρ Π²Π΅ΡΡΠΈΡ, ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π² ΡΠΈΠ³ΡΡΠ½ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ ΡΠΏΠΈΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ il.
ΠΠ»Ρ ΡΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΠ·ΠΎΠ²Ρ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΈΠΏΠ° ErrCode:
if (expected != actual)
error_msg(ErrCode(42), {"functionX", expected, actual});
else
error_msg(ErrCode(0), {"functionX", "okay"});
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΡΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠ·ΡΠΊΠΎΠΌ Π‘++ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΌ ΡΠ°ΠΊΠΎΠ΅ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π‘, ΠΊΠ°ΠΊ varargs. Π Π΄ΡΡΠ³ΠΈΡ ΡΠ΅Π»ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΡ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ varargs ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π‘.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ ΠΈ Ρ ΡΠ·ΡΠΊΠ° Π‘, ΠΈ Ρ Π‘++. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΈΠΏΠ° ΠΊΠ»Π°ΡΡΠ° ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΡ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΡΡΡ Π»ΡΠ±ΡΡ ΠΈΠ· Π΄Π²ΡΡ ΡΠΎΡΠΌ:
void foo(parm_list, ...);
void foo(...);
ΠΠ΅ΡΠ²Π°Ρ ΡΠΎΡΠΌΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΈΠΏ (ΡΠΈΠΏΡ) Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ foo(). ΠΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠΈΠΏΠΎΠ² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ. ΠΠ»Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠΎΡΠΈΡ, Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΠΈΠΏΠΎΠ² Π½Π΅Ρ. Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠΎΡΠΌΠ΅ Π·Π°ΠΏΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π° 6.2.6Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.27. ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° initializer_list<int> ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΡΡΠΌΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ°.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.28. ΠΠΎ Π²ΡΠΎΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ error_msg(), Π³Π΄Π΅ Ρ Π½Π΅Π΅ Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΈΠΏΠ° ErrCode, ΠΊΠ°ΠΊΠΎΠ² ΡΠΈΠΏ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΡΠΈΠΊΠ»Π΅ for?
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 6.29. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΠΏΠ° initializer_list Π² ΡΠ΅ΡΠΈΠΉΠ½ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ for ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π±Ρ Π²Ρ ΡΡΡΠ»ΠΊΡ ΠΊΠ°ΠΊ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΊΠ»Π°? ΠΠ±ΡΡΡΠ½ΠΈΡΠ΅ ΠΏΠΎΡΠ΅ΠΌΡ.
6.3. Π’ΠΈΠΏΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ return
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ return Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·Π²Π°Π»Π° ΡΠ΅ΠΊΡΡΡΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄Π²Π΅ ΡΠΎΡΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° return:
return;
return Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅;
6.3.1. Π€ΡΠ½ΠΊΡΠΈΠΈ Π±Π΅Π· Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ return Π±Π΅Π· Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΈΠΏΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ void. Π€ΡΠ½ΠΊΡΠΈΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ ΡΠΈΠΏΠΎΠΌ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ void, Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ return. Π ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠΏΠ° void ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ return Π½Π΅ΡΠ²Π½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°.