ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

НСдостатки языка программирования

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ присваивания обозначаСтся ΠΊΠ°ΠΊ =, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ сравнСния ΠΊΠ°ΠΊ ==. Π˜Ρ… Π»Π΅Π³ΠΊΠΎ ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈ этом опСрация присваивания Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, поэтому присваиваниС Π½Π° ΠΌΠ΅ΡΡ‚Π΅ выраТСния являСтся синтаксичСски ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, Π° Π² ΠΊΠΎΠ½ΡΡ‚рукциях Ρ†ΠΈΠΊΠ»Π° ΠΈ Π²Π΅Ρ‚влСния появлСниС числа Π½Π° ΠΌΠ΅ΡΡ‚Π΅ логичСского значСния Ρ‚Π°ΠΊΠΆΠ΅ допустимо, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Π°Ρ конструкция оказываСтся синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

НСдостатки языка программирования (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠžΡ‚Ρ‡Π°ΡΡ‚ΠΈ нСдостатки C++ унаслСдованы ΠΎΡ‚ ΡΠ·Ρ‹ΠΊΠ°-ΠΏΡ€Π΅Π΄ΠΊΠ° — Π‘ΠΈ, — ΠΈ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ большСй совмСстимости с Π‘ΠΈ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ нСдостатки, ΠΊΠ°ΠΊ:

Бинтаксис, ΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ошибки;

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ присваивания обозначаСтся ΠΊΠ°ΠΊ =, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ сравнСния ΠΊΠ°ΠΊ ==. Π˜Ρ… Π»Π΅Π³ΠΊΠΎ ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ, ΠΏΡ€ΠΈ этом опСрация присваивания Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, поэтому присваиваниС Π½Π° ΠΌΠ΅ΡΡ‚Π΅ выраТСния являСтся синтаксичСски ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, Π° Π² ΠΊΠΎΠ½ΡΡ‚рукциях Ρ†ΠΈΠΊΠ»Π° ΠΈ Π²Π΅Ρ‚влСния появлСниС числа Π½Π° ΠΌΠ΅ΡΡ‚Π΅ логичСского значСния Ρ‚Π°ΠΊΠΆΠ΅ допустимо, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Π°Ρ конструкция оказываСтся синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ошибки: if (x=0){ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹}. Π—Π΄Π΅ΡΡŒ Π² ΡƒΡΠ»ΠΎΠ²Π½ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ ΠΏΠΎ ΠΎΡˆΠΈΠ±ΠΊΠ΅ написано присваиваниС вмСсто сравнСния. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x Ρ Π½ΡƒΠ»Ρ‘ΠΌ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° присвоит x Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ условия Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ if. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½ΡƒΠ»ΡŒ соотвСтствуСт логичСскому Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ «Π»ΠΎΠΆΡŒ», Π±Π»ΠΎΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² ΡƒΡΠ»ΠΎΠ²Π½ΠΎΠΉ конструкции Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ся Π½ΠΈΠΊΠΎΠ³Π΄Π°. Ошибки Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π²Ρ‹ΡΠ²Π»ΡΡ‚ΡŒ, Π½ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… соврСмСнных компиляторах прСдлагаСтся диагностика Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… конструкций;

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания (=), ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (++), Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (—) ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ ΡΠΎΡ‡Π΅Ρ‚Π°Π½ΠΈΠΈ с ΠΎΠ±ΠΈΠ»ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ это позволяСт, хотя ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Ρ‹Π²Π°Π΅Ρ‚, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Π΅ выраТСния. НаличиС этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Π‘ΠΈ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ инструмСнт Ρ€ΡƒΡ‡Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π² Π½Π°ΡΡ‚оящСС врСмя ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ компиляторы ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΈ Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… выраТСниях. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² языков Π‘ΠΈ ΠΈ C++ — ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ программисту ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π»ΡŽΠ±ΠΎΠΌ стилС, Π° Π½Π΅ Π½Π°Π²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ «Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ» ΡΡ‚ΠΈΠ»ΡŒ;

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ (#define) ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ, Π½ΠΎ ΠΎΠΏΠ°ΡΠ½Ρ‹ΠΌ срСдством. Они сохранСны Π² C++ нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Π½ΠΈΡ…, благодаря шаблонам ΠΈ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½Ρ‹ΠΌ функциям, Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ Π²Π΅Π»ΠΈΠΊΠ°. Π’ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½Ρ‹Ρ… стандартных Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ опасных макросов.

НСкоторыС прСобразования Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½Ρ‹. Π’ Ρ‡Π°ΡΡ‚ности, опСрация Π½Π°Π΄ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈ Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ числами Π²Ρ‹Π΄Π°Ρ‘Ρ‚ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚;

C++ позволяСт ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ break Π² Π²Π΅Ρ‚Π²ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch с Ρ†Π΅Π»ΡŒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²Π΅Ρ‚Π²Π΅ΠΉ. Π’Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ принят Π² ΡΠ·Ρ‹ΠΊΠ΅ Java. Π•ΡΡ‚ΡŒ ΠΌΠ½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это затрудняСт ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. НапримСр, Π² ΡΠ·Ρ‹ΠΊΠ΅ C# Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ всСгда ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ break, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ goto case N Π΄Π»Ρ явного указания порядка выполнСния;

ΠŸΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€, унаслСдованный ΠΎΡ‚ Π‘ΠΈ, ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π΅Π½. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ с ΠΎΠ΄Π½ΠΎΠΉ стороны ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ нСльзя (ΠΈΠ»ΠΈ тяТСло) ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ мСтапрограммирования, Π° Ρ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, вслСдствиС своСй примитивности, ΠΎΠ½ Ρ‡Π°ΡΡ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΡˆΠΈΠ±ΠΊΠ°ΠΌ ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ дСйствий ΠΏΠΎ ΠΎΠ±Ρ…ΠΎΠ΄Ρƒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. НСкоторыС языки программирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Scheme ΠΈ Nemerle) ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ бСзопасныС систСмы мСтапрограммирования (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ макросами, Π½ΠΎ ΠΌΠ°Π»ΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ макросы Π‘ΠΈ/C++);

ΠŸΠ»ΠΎΡ…Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ (ΠΏΠΎ ΡΡƒΡ‚ΠΈ, Π² ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠΌ Π‘ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ языка отсутствуСт, Π΅Ρ‘ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠ΅Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ). ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ интСрфСйса внСшнСго модуля Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅ΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Π½ΡƒΡŽ вставку Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° (#include) ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ замСдляСт ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ большого количСства ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обрабатываСтся компилятором, оказываСтся ΠΎΡ‡Π΅Π½ΡŒ Π²Π΅Π»ΠΈΠΊ). Π­Ρ‚Π° схСма Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ скопирована Π² C++. Для устранСния этого нСдостатка, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ компиляторы Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ прСкомпиляции Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (Π°Π½Π³Π». Precompiled header).

К ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½Ρ‹ΠΌ нСдостаткам C++ ΠΌΠΎΠΆΠ½ΠΎ отнСсти:

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… C++ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ, Π° ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ компилятора сопряТСно с Π±ΠΎΠ»ΡŒΡˆΠΈΠΌ количСством ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ;

МногиС конструкции Π‘++ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ Π‘ΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Π‘++. Π­Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° сбиваСт с Ρ‚ΠΎΠ»ΠΊΡƒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ². НапримСр, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ dynamic_cast позволяСт привСсти ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ ссылку строго Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ классов. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌ, Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ привСдСния Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ инструмСнтов Ρ‚ΠΈΠΏΠ° grep. Однако вслСдствиС трСбования высокой стСпСни совмСстимости с Π‘ΠΈ ΡΡ‚Π°Ρ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² всё Π΅Ρ‰Ρ‘ поддСрТиваСтся;

Иногда ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ приводят ΠΊ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° ΠΎΡ‡Π΅Π½ΡŒ большого ΠΎΠ±ΡŠΡ‘ΠΌΠ°. Для сниТСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° машинного ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄. Π”Ρ€ΡƒΠ³ΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся стандартизованная Π΅Ρ‰Ρ‘ Π² 1998 Π³ΠΎΠ΄Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ экспорта шаблонов. НСкоторыС Π°Π²Ρ‚ΠΎΡ€Ρ‹ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π΅Ρ‘ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½Π° доступна Π½Π΅ Π²ΠΎ Π²ΡΠ΅Ρ… компиляторах. «Π Π°Π·Π΄ΡƒΠ²Π°Π½ΠΈΠ΅» машинного ΠΊΠΎΠ΄Π° вслСдствиС использования шаблонов часто прСувСличиваСтся, ΠΈ ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ компиляторы Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΡƒΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ это явлСниС;

ΠœΠ΅Ρ‚Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ шаблонов C++ слоТно ΠΈ ΠΏΡ€ΠΈ этом ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ Π² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ях. Оно состоит Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ срСдствами шаблонов C++ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ языка программирования, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ компиляции. Π‘Π°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ данная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ вСсьма ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Π°, Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ вСсьма Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ. МСнСС распространённыС языки Lisp/Scheme, Nemerle ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ простыС для восприятия подсистСмы мСтапрограммирования. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΡΠ·Ρ‹ΠΊΠ΅ D Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° сравнимая ΠΏΠΎ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΠΈ, Π½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ простая Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ подсистСма шаблонного мСтапрограммирования;

Явная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования присутствуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ стандартС c++0x. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ±Π΅Π» устраняСтся Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ (Loki, Boost), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ срСдства мСтапрограммирования для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ языка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ конструкциями (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ лямбд/Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²), Π½ΠΎ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ уступаСт качСству встроСнных Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΈΠ΅ возмоТности Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языков, ΠΊΠ°ΠΊ сопоставлСниС с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ, Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΊΡ€Π°ΠΉΠ½Π΅ слоТно ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ срСдствами мСтапрограммирования;

НСкоторыС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ нСдостатком языка C++ отсутствиС встроСнной систСмы сборки мусора. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, срСдства C++ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ сборку мусора Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΈ сборки мусора ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ RAII являСтся Π±ΠΎΠ»Π΅Π΅ достойной Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ. Π‘++ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ самому Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ управлСния рСсурсами.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ