C має головну перевагу в тому, що ви можете просто побачити, що відбувається насправді, дивлячись на якийсь фрагмент коду (так, препроцесор: компілюйте з -E, а потім ви його бачите). Щось занадто часто не відповідає дійсності, коли ви дивитесь якийсь код C ++. Там у вас є конструктори та деструктори, які викликаються неявно на основі обсягу або через завдання, у вас є перевантаження оператора, яка може мати дивовижну поведінку, навіть коли це не дуже зловживано. Я визнаю, що я диригент від контролю, але я дійшов висновку, що це не така погана звичка для розробника програмного забезпечення, який хоче написати надійне програмне забезпечення. Я просто хочу мати справедливий шанс сказати, що моє програмне забезпечення робить саме те, що належить зробити, і не має одночасно поганого самопочуття в животі, тому що я знаю, що в ньому може бути ще стільки помилок, що я б не хотів '
У C ++ також є шаблони. Я ненавиджу їх і люблю, але якщо хтось каже, що він повністю розуміє їх, я називаю його брехуном! Сюди входять автори-компілятори, а також люди, які беруть участь у визначенні стандарту (що стає очевидним при спробі його прочитати). Існує так багато абсурдно оманливих кутових справ, що їх просто неможливо розглянути, поки ви пишете фактичний код. Я люблю шаблони C ++ за їхню потужність. Це дійсно дивовижно, що ви можете зробити з ними, але вони також можуть призвести до найдивніших і найскладніших помилок, які можна (не) уявити. І ці помилки насправді трапляються і навіть не рідко. Читання про правила, що стосуються вирішення шаблонів в AR + C ++, майже змушує мою голову вибухнути. І це дає мені погане відчуття даремно витраченого часу на те, щоб прочитати повідомлення про помилки компілятора, довжиною декілька 1000 символів, на які мені потрібно вже 10 хвилин або більше, щоб зрозуміти, що компілятор насправді хоче від мене. У типовому коді C ++ (бібліотека) ви також часто знаходите багато коду у файлах заголовків, щоб зробити певні шаблони можливими, що, у свою чергу, робить цикли компіляції / виконання болісно повільними навіть на швидких машинах і вимагає перекомпіляції великих частин коду, коли ви щось змінюєте. там.
У C ++ також є пастка const. Ви або уникаєте const для всіх, крім самих тривіальних випадків використання, або вам рано чи пізно доведеться відкинути його або переробити великі частини бази коду, коли він розвивається, особливо коли ви збираєтеся розробити приємний і гнучкий дизайн OO.
C ++ має сильніший текст, ніж C, що чудово, але іноді мені здається, що я годую Tamagotchi, коли намагаюся скласти код C ++. Значна частина попереджень і помилок, які я зазвичай отримую від цього, насправді я не роблю те, що не працює, а лише те, що компілятор не любить, щоб я робив це так чи ні, не вводячи тут чи вводячи додаткові ключові слова та там.
Це лише деякі причини, чому мені не подобається C ++ для програмного забезпечення, яке я пишу самостійно, лише використовуючи деякі нібито надійні зовнішні бібліотеки. Справжній жах починається, коли ви пишете код в командах з іншими людьми. Це майже не має значення, чи дуже розумні вони хакери на C ++ чи наївні новачки. Усі роблять помилки, але C ++ робить їх навмисно важко їх знайти і ще складніше їх помітити, перш ніж вони трапляться.
З C ++ ви просто втрачаєтесь, не використовуючи налагоджувач весь час, але мені подобається, щоб я міг перевірити правильність свого коду в голові, і не потрібно покладатися на налагоджувач, щоб знайти свій код, що працює на шляхах, яких я ніколи не очікував. Насправді я намагаюся запустити весь свій код у своїй голові і намагаюся взяти всі гілки, які він має, навіть в підпрограмах і т. Д. І використовувати налагоджувач лише зрідка, щоб побачити, як гарно він проходить через усі затишні місця, які я підготував до нього. Написання та виконання стільки тестових випадків, що всі шляхи коду використовувались у всіх комбінаціях із усілякими дивними вхідними даними, просто неможливо. Тож ви можете не знати про помилки в програмах C ++, але це не означає, що їх там немає. Чим більше проектів на C ++, тим меншою стає моя впевненість у тому, що у нього не буде багато невизначених помилок, навіть якщо він ідеально працює з усіма даними тестових даних. Врешті-решт я його сміття і починаю заново з якоюсь іншою мовою або комбінацією інших мов.
Я міг би продовжувати, але, мабуть, я до цього моменту зрозумів свою думку. Все це змусило мене відчувати себе непродуктивно, коли я програмую на C ++, і змусило мене втратити впевненість у правильності власного коду, що означає, що я більше не буду його використовувати, в той час як я все ще використовую і покладаюся на код C, який написав більше 20 багато років тому. Можливо, це просто тому, що я не хороший програміст на C ++, або, можливо, я досить хороший на C та інших мовах дозволяє мені розпізнати, чим я є насправді ламер, коли мова йде про C ++, і що я ніколи не зможу його повністю зрозуміти. .
Життя коротке...