ПредишенСледващото

На първо място, трябва да се подчертае, че оценката на предимствата и, в частност, C ++ недостатъци трябва да бъдат в рамките на принципите, на които структурата на езика, както и изискванията, които бяха представени на него в началото.

C ++ - изключително мощен език, който съдържа инструменти за създаване на ефективни програми за почти всякакви цели, от комунални услуги от ниско ниво и драйвери за комплексни софтуерни системи за различни приложения. По-специално:

Част C ++ недостатъци, наследени от предците език - Cu - и причинени първоначално уточни изискването възможно най-голяма съвместимост с Cu. Това недостатъци, като например:

  • Синтактична грешка провокира:
  • задача операция = означен като и като операция сравнение ==. Те са лесно объркан и оператора за присвояване връща стойност, така че експресията на задача е на място е синтактично правилно и структурите на линия и появата на разклоняване на мястото на логическите стойности също са допустими, така че погрешно дизайн е синтактично правилно. Типичен пример за тази грешка:
    ако (х = 0) <операторы>
    Тук, в условен израз погрешно написан задача вместо сравнение. В резултат на това вместо да се налага да се сравнява текущата стойност на х до нула, програмата ще възложи х стойността на нула, а след това да го интерпретира като стойността на състоянието в случай изявлението. От нула съответства на логическа стойност "невярно", единични оператори в конвенционалната структура не винаги се изпълняват. Грешки от този вид е трудно да се определи, но в много от съвременните компилатори са поканени диагноза на някои от тези структури.
  • задача оператор (=), нарастване На (++), намаляване (-) и друга стойност връщане. Когато се комбинира с изобилие от работа го позволява, въпреки че не е задължен, да се създаде изрази трудни за четене. Наличието на тези операции в морето е било причинено от желанието за ръчни инструменти, код за оптимизация, но в момента оптимизиране компилатори обикновено генерират оптимален код и традиционните изрази. От друга страна, един от основните принципи на C и C ++ - да се даде възможност на програмиста да пиша във всеки стил, а не да се налага "добър" стил.
  • Макроси (#define) е мощен, но опасни средства. Те се съхраняват в C ++, независимо от факта, че необходимостта от тях, благодарение на шаблоните и вградени функции, не е толкова голяма. наследство стандартна библиотека на много потенциално опасни макроси.
  • Някои реализации тип не са интуитивни. По-специално, действието на неподписани номера и забележителност произвежда неподписан резултат.
  • C ++ позволява преминаване клонове прекъсвач оператор, за да се гарантира последователното изпълнение на няколко клона. Същият подход е приет в Java. Смята се, че е трудно да се разбере кода. Така например, в C #, че винаги трябва да напише декларация почивка, или да използвате Отидох в случай N изрично да укажете реда на изпълнение.
  • Препроцесор наследена от C, че е много примитивно. Това води от една страна на факта, че с негова помощ е невъзможно (или трудно) да извърши някакъв проблем мета-програмиране, а от друга, поради своята примитивност, това често води до грешки и изисква много действия, за да се заобиколи потенциални проблеми. Някои езици за програмиране (например схема и Nemerle) имат много по-мощен и по-сигурна система за мета-програмиране (наричани също макроси, но малко напомня на макроси C / C ++).
  • Лош подкрепа модулност (в действителност, в класическия С модулността на нивото на език не е наличен, софтуера си предадена на свръзката). Свързване на модула интерфейс чрез външен предпроцесорни поставете заглавния файл (#include) сериозно забавя компилация чрез свързване на голям брой модули (защото получения файл, който се обработва от компилатора, е много голяма). Тази схема непроменен копирани в C ++. За да се отговори на този проблем, много компилатори прилага механизъм е предкомпилирана заглавни файлове (инж. Прекомпилирани хедър).

може да се дължи на недостатъците на собствената C ++:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!