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

C++

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

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

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

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

http://habrahabr.ru/company/yandex/blog/206234/
А что это за костыли такие?Прошу помощи олдфагов.Можно будет составить список хотя бы 10 самых самых и привести примеры исходного кода.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 23:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дедушка, а что это за костыль у тебя? (C++):

Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String - C++
Есть строка Glib::ustring, пытался её конвертировать в sf::String, и вроде бы всё работает без особых костылей, но как добрался до...

Memo->Lines[1] - что за тип? костыль? C++ Builder - C++ Builder
Пояснение: bus03_eightschools.time - int Lines - "06:30" Как записать эту строчку правильно: bus03_eightschools.time =...

Объясните подробно данный код программы. Знаю что это фильтр а пошагово что к чему не понимаю - C++ Builder
void __fastcall TForm1::suiButton7Click(TObject *Sender) { tdiag -> Filtered = false; tdiag -> Filt = «id_p=« + suiEdit6 -> Text; ...

afx_msg: что это и зачем это? - Visual C++
Рассматриваю примеры по MFC, часть функций там переписываются с afx_msg, а часть без: BOOL OnInitDialog(); afx_msg HBRUSH...

Подскажите что делать. Знаю что надо перегрузить оператор но никак не могу понять как это сделать - Visual C++
#include "stdafx.h" #include <iostream> #include <conio.h> #include <Windows.h> #include <string> using namespace...

Как работать с LPCWSTR? Как перевести char в это? И что это вообще такое? - C++ WinAPI
Как работать с LPCWSTR? Как перевести char в это? И что это вообще такое?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 347
Записей в блоге: 2
28.01.2014, 23:45 #2
Ну например отсутствие встроенного типа string. string конечно же есть в STL и он настолько хорош, что сейчас, хотя многие уже просят, string в сам язык пока что не ввели. Хотя во многих других языках того же уровня string есть. Разница не принципиальна, но особенность всё таки интересная.
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.01.2014, 23:59 #3
гуглите undefined behavior, все что найдете все ваше и это только "законные" костыли...а сколько ещё формальных...платформозависимых...Си-совместимых и т.д. и т.д.
0
alex_x_x
29.01.2014, 00:09
  #4

Не по теме:

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

0
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 347
Записей в блоге: 2
29.01.2014, 00:14 #5

Не по теме:

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



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

Не по теме:

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

0
Kuzia domovenok
29.01.2014, 00:45
  #6

Не по теме:

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

0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 02:13 #7
Цитата Сообщение от НеСказочник Посмотреть сообщение
string конечно же есть в STL
Разве?
1
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 02:20 #8
...
0
Миниатюры
Дедушка, а что это за костыль у тебя?  
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.01.2014, 04:01 #9
...
0
Миниатюры
Дедушка, а что это за костыль у тебя?  
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 347
Записей в блоге: 2
29.01.2014, 12:07 #10
Цитата Сообщение от alsav22 Посмотреть сообщение
...
Сейчас, если что, не С++98, а С++11 есть. Хотя да, я сейчас уточнил и string входит в список стандартных классов, а STL - это стандартные шаблоны. Так что да, формально, string в STL не входит. Но к словам могли бы и не придираться.
0
easybudda
Модератор
Эксперт CЭксперт С++
9632 / 5580 / 948
Регистрация: 25.07.2009
Сообщений: 10,714
29.01.2014, 18:29 #11
Цитата Сообщение от НеСказочник Посмотреть сообщение
Но к словам могли бы и не придираться.
Человек сделал абсолютно правильное замечание, какие придирки? И офтопить не нужно.
1
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")
0
Dmitriy_M
1349 / 1230 / 114
Регистрация: 20.03.2009
Сообщений: 4,420
Записей в блоге: 11
03.02.2014, 11:04 #13
Цитата Сообщение от alex_x_x Посмотреть сообщение
Модель наследования переусложнена и из-за совместимости с предыдущими стандартами видимо никогда не придет к простым и логичным моделям как в Java например
Что не так с наследованием?
0
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 с таким подходом не будет никогда
--> ...
я джаву знаю достаточно посредственно, но насколько я вижу этих проблем там нет (за счет отказа от невиртуальных методов, перегрузки, волной трактовки доступа итд)

самые суровые грабли начинаются при множественном наследовании (от которого в явном виде отказались в жабе)
ну это вообще отдельный разговор - несколько виртуальных таблиц, ромбовидное наследование, виртуальное наследование...
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
04.02.2014, 02:37 #15
alex_x_x, если ты в своём коде перегружаешь только виртуальные методы базового класса, это только твои проблемы! То что одни не используют, другие пользуют постоянно!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 02:37
Привет! Вот еще темы с ответами:

Что это за знак >> прочитал что это сдвиг вправо? что он делает - C++
int d=6, c=5,f; f = d >> c; cout<< f; вывод 0

Какой прогой быстрее всего показать что у тебя есть на HDD? - Софт
Здарова! У нас есть трекер, и мы хотим чтобы прежде чем стать аплоадерами, пользователи показали что у них есть на харде (фильмы, игры,...

Можно ли сказать, что оператор With - "костыль"? - Pascal
Никак не могу вспомнить где прочитал это заявление, но что-то было о сравнении языков опять. Всерьёз заинтересовало - почему вдруг...

Не могу понять, что это за реализация ORM и как это работает - C#
Есть проект на C#, есть база данных MSSQL, есть код, который позволяет мне добавлять и удалять данные из базы данных (без создания и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.02.2014, 02:37
Ответ Создать тему
Опции темы

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