Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
macro4wf
45 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 7
#1

Дедушка, а что это за костыль у тебя? - C++

28.01.2014, 23:41. Просмотров 1635. Ответов 22
Метки нет (Все метки)

Есть языки программирования с очень длинной и непростой историей, у которых примерно половина их возможностей – это какие-то исторически сложившиеся сложные и ненужные костыли. К таким, например, относится и наш любимый C++. Если вы не разработчик компилятора C++, почти всегда можно найти что-то, чего вы в языке не знаете.

http://habrahabr.ru/company/yandex/blog/206234/
А что это за костыли такие?Прошу помощи олдфагов.Можно будет составить список хотя бы 10 самых самых и привести примеры исходного кода.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 23:41     Дедушка, а что это за костыль у тебя?
Посмотрите здесь:
Memo->Lines[1] - что за тип? костыль? C++ Builder C++ Builder
Visual C++ afx_msg: что это и зачем это?
C++ Убрать костыль typedef
C++ Необходимо протестировать костыль
Объясните подробно данный код программы. Знаю что это фильтр а пошагово что к чему не понимаю C++ Builder
Boost C++ Boost::asio клиет-сервер - есть ощущение, что где-то что-то блокируется, не знаю как это дебажить
Подскажите что делать. Знаю что надо перегрузить оператор но никак не могу понять как это сделать Visual C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 344
Записей в блоге: 2
28.01.2014, 23:45     Дедушка, а что это за костыль у тебя? #2
Ну например отсутствие встроенного типа string. string конечно же есть в STL и он настолько хорош, что сейчас, хотя многие уже просят, string в сам язык пока что не ввели. Хотя во многих других языках того же уровня string есть. Разница не принципиальна, но особенность всё таки интересная.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.01.2014, 23:59     Дедушка, а что это за костыль у тебя? #3
гуглите undefined behavior, все что найдете все ваше и это только "законные" костыли...а сколько ещё формальных...платформозависимых...Си-совместимых и т.д. и т.д.
alex_x_x
29.01.2014, 00:09
  #4

Не по теме:

НеСказочник,
STL - это часть языка
1) в с/с++ подход - все, что может быть реализовано на уровне библиотеки, написанной на самом языке - пишется так.
И такой подход не только в цпп (вон в CL - определение функции defun - может быть написано на самом же CL, хоть есть и built-in версия)
2) кроме того stl физически не выделяется из языка - это исторический артефакт времен, когда STL был отдельной от языка библиотекой, разрабатываемой cgi и hp

НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 344
Записей в блоге: 2
29.01.2014, 00:14     Дедушка, а что это за костыль у тебя? #5

Не по теме:

Цитата Сообщение от alex_x_x Посмотреть сообщение
STL - это часть языка
Почитайте определение языка программирования. STL - не часть языка хотя бы по тому, что его можно полностью заменить другой библиотекой.



Добавлено через 45 секунд

Не по теме:

А нарушить правила синтаксиса или заменить какой-то оператор вы не можете.

Kuzia domovenok
29.01.2014, 00:45
  #6

Не по теме:

Очередная тема для флуда? Делаем ставки, как скоро её убьёт модер?

alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 02:13     Дедушка, а что это за костыль у тебя? #7
Цитата Сообщение от НеСказочник Посмотреть сообщение
string конечно же есть в STL
Разве?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 02:20     Дедушка, а что это за костыль у тебя? #8
...
Миниатюры
Дедушка, а что это за костыль у тебя?  
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 04:01     Дедушка, а что это за костыль у тебя? #9
...
Миниатюры
Дедушка, а что это за костыль у тебя?  
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 344
Записей в блоге: 2
29.01.2014, 12:07     Дедушка, а что это за костыль у тебя? #10
Цитата Сообщение от alsav22 Посмотреть сообщение
...
Сейчас, если что, не С++98, а С++11 есть. Хотя да, я сейчас уточнил и string входит в список стандартных классов, а STL - это стандартные шаблоны. Так что да, формально, string в STL не входит. Но к словам могли бы и не придираться.
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,498
29.01.2014, 18:29     Дедушка, а что это за костыль у тебя? #11
Цитата Сообщение от НеСказочник Посмотреть сообщение
Но к словам могли бы и не придираться.
Человек сделал абсолютно правильное замечание, какие придирки? И офтопить не нужно.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
01.02.2014, 16:36     Дедушка, а что это за костыль у тебя? #12

Не по теме:

Цитата Сообщение от НеСказочник Посмотреть сообщение
Почитайте определение языка программирования. STL - не часть языка хотя бы по тому, что его можно полностью заменить другой библиотекой.
радикальные языковеды называют языком только то, что определено ее формальной грамматикой? Если да - то вопросов нет.
В реальной жизни грамматики приводят для описания основ, а все остальное стандартизуют.

Я опять же привожу пример CL, в котором определение функции (defun) не является встроенным средством компилятора/интерпретатора, а может быть реализовано как макрос. Это вопрос реализации, но в стандарте defun приводится как способ (один из though) определения функции (не вдаваясь в вопросы связывания итд)



Главный костыль в цпп - это конечно же ц. Из-за совместимости с ним многие вещи пострадали
Такие проблемы
C++
1
T t;
vs
C++
1
T t();
вытекают из способов декларации в ц.

Модель наследования переусложнена и из-за совместимости с предыдущими стандартами видимо никогда не придет к простым и логичным моделям как в Java например

Добавлено через 41 минуту
еще у с/с++ и унаследовавших языков (как и многих предшественников типа фортрана) очень вольная грамматика относительно выражений.
изза этого многие символы недоступны в идентификаторах (например file-name, valid? итд)
не то чтобы надо скатываться к строгости питона, но легко можно было бы жить без этого (сделав более строгими выражения. Все равно ж люди обычно пишут "a - b", а не "a-b")
Dmitriy_M
1341 / 1222 / 112
Регистрация: 20.03.2009
Сообщений: 4,392
Записей в блоге: 11
03.02.2014, 11:04     Дедушка, а что это за костыль у тебя? #13
Цитата Сообщение от alex_x_x Посмотреть сообщение
Модель наследования переусложнена и из-за совместимости с предыдущими стандартами видимо никогда не придет к простым и логичным моделям как в Java например
Что не так с наследованием?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
04.02.2014, 02:21     Дедушка, а что это за костыль у тебя? #14
Dmitriy_M, ну в цпп наследование реализовано очень низкоуровнево (например при наследование методы могут быть как virtual, так и не virtual)
Это с одной стороны теоретически предполагает некоторую гибкость (местами порождая темные паттерны), с другой стороны должно служить целям перформанса (экономия хождения по vtable'у). На самом деле мы получаем :
--> неожиданный полиморфизм - невиртуальные методы в разных контекстах ведут себя по-разному
--> невиртуальные методы могут перегружаться (создавая новые контексты)
--> с одной стороны есть public/private/protected наследования, с другой стороны в субклассах можно использовать свои модификаторы доступа, нарушая таки модель наследования
--> в ряде случаев виртуальные методы не могут быть вызваны из конструктора
--> reflection'a с таким подходом не будет никогда
--> ...
я джаву знаю достаточно посредственно, но насколько я вижу этих проблем там нет (за счет отказа от невиртуальных методов, перегрузки, волной трактовки доступа итд)

самые суровые грабли начинаются при множественном наследовании (от которого в явном виде отказались в жабе)
ну это вообще отдельный разговор - несколько виртуальных таблиц, ромбовидное наследование, виртуальное наследование...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 02:37     Дедушка, а что это за костыль у тебя?
Еще ссылки по теме:
C++ Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String
C++ Что это за метод?И что он делает?
Объясните что именно делает "x%d, y%d: " или что это в даном коде C++
C++ Как понять нормальный у тебя код или нет?
что это? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
04.02.2014, 02:37     Дедушка, а что это за костыль у тебя? #15
alex_x_x, если ты в своём коде перегружаешь только виртуальные методы базового класса, это только твои проблемы! То что одни не используют, другие пользуют постоянно!
Yandex
Объявления
04.02.2014, 02:37     Дедушка, а что это за костыль у тебя?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru