Приходилось слышать, что, если не нужно ООП, проще обойтись С, а если нужно - оно лучше реализовано в Objective C, но насчет последнего хз, сам не пользовался
1) Отсутствие стандарта на name mangling. В результате один и тот же код, собранный разными компилятрами (а иногда и разными версиями одного компилятора), получается не совсместим по ABI.
2) Невозможность выносить шаблоны из заголовочных файлов. Это было в стандарте, но из-за очень высокой сложности реализации пришлось убрать.
3) Некоторые вещи очень сложны и неинтуитивны. В результате получаем кучу граблей, аккуратно присыпанных листвой =).
4) Куча граблей с кроссплатформенностью. Как это ни странно звучит. С++ успешно унаследовал все эти грабли от Си.
> 1) Отсутствие стандарта на name mangling. В результате один и тот же код, собранный разными компилятрами (а иногда и разными версиями одного компилятора), получается не совсместим по ABI.
Вообще-то стандарт на ABI есть уже несколько лет как.
> 3) Некоторые вещи очень сложны и неинтуитивны.
Вот это - единственная реальная претензия. Правда, она стоит всех остальных.
> Вообще-то стандарт на ABI есть уже несколько лет как.
А на манглинг?
Т.е. если я соберу библиотеку в ICC, с классами и шаблонами (с конкретными специализациями), то я смогю её без проблем подключить к программе, собранной GCC? Вроде раньше такое получалось только со включением разных "режимов совместимости"...
> Т.е. если я соберу библиотеку в ICC, с классами и шаблонами (с конкретными специализациями), то я смогю её без проблем подключить к программе, собранной GCC? Вроде раньше такое получалось только со включением разных "режимов совместимости"...
Про ICC ничего сказать не могу, но сам ABI был изначально разработан для Itanium, так что наверняка Intel его поддерживает :)
За страшные шаблоны: проверка типов в шаблонном коде выполняется на этапе инстанцирования шаблона. В С++201х будут концепции (concepts) которые должны исправить это. Неудобочитаемые сообщения об ошибках в шаблонном коде (рекомендую посмотреть на ошибки вылезающие при использовании boost.lambda и boost.spirit). Отсутсвие лямбд в языке, что делает менее удобным использование алгоритмов из стандартной библиотеки (boost.lambda - костыль). Препроцессор, которые ничего не знает ни о лексике С++, ни, тем более, о его синтаксисе.
Размер кода по сравнению с Си уменьшается ну процентов на двадцать-тридцать в лучшем случае. При этом он сложнее Си минимум раз в десять и требует тщателного предварительного проектирования что нивелирует его достоинство в размере кода.
Сам пишу на C++, язык нравится, наверное потому, что других не видел-не использовал.
C - микроконтроллеры, нормальный язык, быстрый, простой, вездеживущий,
FoxPro - (Visual)(не к ночи будет помянут, БД) - дурной язык, но из-за некоторых моментов вполне себе имеющий нишу (или имеющий в нише?), ну и макроподстановки там рулят :)
PHP - пара страничек на уровне "Hello world с классами",
bash - давайте расскажите после него, что C++ - сложный и не для людей :), писал чуть-чуть скриптов
perl (w/o language), правил чуть-чуть скриптов, лучше бы писал...
java (то ещё говно, причём тормозное в плане разработки) - пара утилит для работы.
На что предлагаете посмотреть, чтобы понять, что C++ - страшный язык? :)
>возможно в вашем случае написание любого кода этим и сопровождается, но это говорит только о вас
Разумеется, настоящие мужчины не стонут от отсутствия делегатов и foreach, настоящие мужчины молча сжимают зубы и годами ждут новых стандартов, а пока обвешиваются с ног до головы шаблонами и макросами. =)
в gcc/mingw он относительно давно присутствует, в icc вроде тоже( читал, что есть - но не проверял ), а вот любителям visual прийдется ждать осени и релиза visual 2010
На D смотрел, но я тогда только начинал писать на C++ (у меня стаж около года, всё написанное до этого на C++ - считать не стоит :) ), и очень многого не знал (с теми же самыми шаблонами только сейчас начинаю потихоньку разбираться).
На D написан порт Morrowind.
Если я правильно понимаю, то с выходом нового стандарта язык очень преобразится и станет ещё более выразительным и мощным, и быстрым (Ссылки на временные объекты/Семантика переноса). Но это так, рассуждения дилетанта.
А про делегаты - вот не понимаю я этой фишки, чем это от функторов отличается-то?
2 namezys - вот выйдет осенью - там и видно будет :) Только сдаётся мне, что стандарт будет называться c++0A :)