- 1
auto filename = std::string{};
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+48
auto filename = std::string{};
laMer007 12.05.2015 14:23 # +2
greenx 12.05.2015 14:43 # +2
kegdan 12.05.2015 14:55 # +2
Stertor 12.05.2015 15:13 # +1
TarasB 12.05.2015 15:19 # +2
roman-kashitsyn 12.05.2015 15:20 # +3
crastinus 12.05.2015 16:09 # +2
3_14dar 12.05.2015 19:05 # +1
bormand 12.05.2015 20:40 # +1
3_14dar 12.05.2015 20:57 # 0
bormand 12.05.2015 21:05 # +1
3_14dar 12.05.2015 21:26 # 0
Чем не угодил Arrays.asList(1,2,3,4,5)?
bormand 12.05.2015 21:30 # 0
1024-- 12.05.2015 21:32 # 0
Бесплатные скобочки освобождают от написания конструктора.
bormand 12.05.2015 21:33 # +1
1024-- 12.05.2015 21:36 # 0
Эти.
Вроде бы ж ради этого и запиливалось, если я правильно понял.
> Схуя
Я про лёгкость написания {1,2} вместо конструктора + (1,2).
bormand 12.05.2015 21:38 # 0
> лёгкость написания {1,2}
Эта лёгкость потом ударит по яйцам, когда кто-нибудь поля местами поменяет или добавит между ними ещё одно. И ты заебёшься искать все места, где с лёгкостью писал {1, 2}. Так что только для мелких приватных POD'ов, не более того.
Antervis 05.07.2015 19:26 # 0
1. начальной инициализации. Например, это:
static const std::vector<std::string> names {"abc", "def", "ghi"};
можно написать в хедере класса, не разводя на .cpp и .h, плюс, это единственный способ инициализировать константные контейнеры.
2. для перечислений, там, где тебя мало интересует порядок. Пример:
for (auto i : {0, 1, 2, 5, 8}) { ... }
или, чуть более классическое
foreach (auto i, {0, 1, 2, 5, 8}) { ... }
я, например, за счет инициализационных списков и оболочки над QVariant реализовал json-подобный синтаксис для формирования json-файлов.
bormand 12.05.2015 21:45 # 0
LispGovno 14.05.2015 07:23 # 0
Для крестобыдла.
bormand 14.05.2015 07:26 # 0
Гццблядство! Нипастандарту.
LispGovno 14.05.2015 07:52 # 0
LispGovno 14.05.2015 07:53 # +1
bormand 14.05.2015 08:00 # 0
LispGovno 14.05.2015 08:05 # +1
inkanus-gray 14.05.2015 11:55 # +2
dxd 14.05.2015 12:13 # 0
Qwertiy 12.05.2015 22:47 # 0
bormand 13.05.2015 01:32 # 0
3_14dar 12.05.2015 22:10 # 0
3_14dar 13.05.2015 02:20 # 0
bormand 13.05.2015 06:26 # 0
3_14dar 13.05.2015 07:38 # 0
bormand 13.05.2015 07:50 # 0
3_14dar 13.05.2015 09:00 # 0
bormand 13.05.2015 09:09 # 0
3_14dar 13.05.2015 10:46 # 0
roman-kashitsyn 13.05.2015 10:56 # 0
bormand 13.05.2015 11:10 # 0
3_14dar 14.05.2015 06:51 # 0
3_14dar 14.05.2015 06:51 # 0
bormand 14.05.2015 07:11 # +3
Ну в сишке больше вариантов нет. А в крестах - да, нинужен.
> а как же printf
Да ёбаный пиздец там. printf() не знает сколько ему параметров передали. Он тупо читает строку формата, и надеется, что программист сделал всё правильно.
В свежих компиляторах есть предупреждение в духе "чувак, у тебя в строке формата 2-й параметр %d, а ты отдал const char *" или "чувак, у тебя в строке формата 2 параметра, а ты отдал один". Само собой, выдаётся оно только для статических строк формата. Всё, больше никаких проверок нет.
Именно поэтому c++11 был глотком свежего воздуха - там и безопасные вариадик шаблоны появились, и initializer list.
3_14dar 14.05.2015 07:53 # 0
Ну так. Значит, получает число параметров? Или я туплю и это статический анализатор?
В си есть же литералы массивов?
bormand 14.05.2015 08:04 # +1
Это статический анализатор. В рантайме сишный printf() ничего проверить уже не может.
> литералы массивов
Да есть то они есть. Но их там можно юзать только в инициализации структурок и массивов через =. И больше нигде.
3_14dar 14.05.2015 23:14 # 0
List list = as_list({1,2,3,4,5})
bormand 14.05.2015 23:18 # 0
inkanus-gray 14.05.2015 11:56 # 0
TarasB 14.05.2015 12:08 # 0
bormand 14.05.2015 13:27 # 0
Ну ассёрт или исключение всяко лучше, чем неопределённое поведение.
kegdan 14.05.2015 17:00 # 0
а ведь Ричи гордился принтфом... неужели он... ГОВНОКОДЕР?!!
inkanus-gray 14.05.2015 17:06 # 0
Для своего времени было нормально... По-царски. Соглашение cdecl, при котором стек очищался вызывающим кодом, а не вызываемым, позволяло передавать переменное количество параметров. А сколько параметров передано, вызываемая функция должна была угадать. У принтфа как раз строка формата и помогала угадать.
inkanus-gray 14.05.2015 17:18 # 0
kegdan 14.05.2015 17:20 # 0
bormand 14.05.2015 17:56 # 0
Из паскалистов один Стертор, походу, остался.
kegdan 14.05.2015 18:10 # 0
Ведь Стретора тупо гнобят, ага
defecate-plusplus 14.05.2015 18:16 # 0
так-то маленькая крестоблядь живёт в душе каждого
даже в микросовтодрочерских душонках кегдана и локича
они просто боятся этого в себе
inkanus-gray 14.05.2015 18:23 # +1
Object Pascal — самый интуитивно понятный язык программирования из относительно популярных.
defecate-plusplus 14.05.2015 18:29 # 0
а уж чего говорить об оптимизациях, разворачиваниях шаблонов, ссылках и move-семантике
bormand 14.05.2015 18:32 # +1
inkanus-gray 14.05.2015 18:34 # 0
bormand 14.05.2015 18:44 # +1
defecate-plusplus 14.05.2015 18:55 # 0
вот уже пенальти пирформанса на пустом месте благодаря референсной имплементации языка
summon Tarasb
inkanus-gray 14.05.2015 18:56 # 0
bormand 14.05.2015 18:57 # +2
Там вроде бы остались атавизмы в виде объектов и записей, которые всё-таки можно размещать на стеке. Нельзя только классы, которые от TObject порождены. Да-да, язык настолько интуитивный, что в нём 3 способа описать хрень-с-полями.
TarasB 15.05.2015 11:03 # 0
Ну и понятно, что для TPoint или для TComplexNumber надо брать object, а не class.
chtulhu 15.05.2015 11:11 # +2
Ну и понятно, что для TPoint или для TComplexNumber надо брать object, а не class.
В стэке выделение памяти будет простым sub esp, N(или что-то типа того) и вызов конструктора. Ололактор - это же как минимум вызов функции, поиск свободной памяти итд. Плюс стэк будет находится в кэше процессора и не придется подгружать данные из памяти.
TarasB 15.05.2015 12:09 # 0
Для объектов покрупнее локальности тебе и не будет.
defecate-plusplus 15.05.2015 11:13 # +2
> Ну, используй свой ололокатор XD
т.е. надо сильно напрячь анус, чтобы попытаться догнать крестоблядство, в котором это всё просто из коробки работает, т.к. можно в стековые объекты?
TarasB 15.05.2015 12:09 # 0
bormand 14.05.2015 19:05 # +4
inkanus-gray 14.05.2015 22:56 # +1
defecate-plusplus 14.05.2015 23:40 # 0
в паскале нет goto?
kegdan 15.05.2015 06:44 # 0
TarasB 15.05.2015 11:05 # +1
я даже не знаю, как это говно выглядит на АСТ-дереве, не могу представить
bormand 15.05.2015 11:08 # +2
switch - это же просто лапша из goto. Так что выглядит как лапша из goto. Наверное.
TarasB 15.05.2015 12:10 # +3
bormand 15.05.2015 12:39 # +1
А вот хуй там. Это блок, в который приземляется куча goto (выходящих из узла с несколькими ветками, да). Вспомни про break, без которого код тупо проваливается в следующую ветку.
TarasB 15.05.2015 12:52 # +2
inkanus-gray 15.05.2015 18:52 # 0
Сишку же и разрабатывали как замену Ассемблеру, поэтому о структурной питушне не всегда думали.
kegdan 15.05.2015 19:04 # +1
inkanus-gray 15.05.2015 19:11 # +1
bormand 15.05.2015 11:29 # +4
3_14dar 16.05.2015 01:11 # 0
bormand 16.05.2015 08:58 # 0
3_14dar 14.05.2015 23:15 # 0
А в сишке свич не за O(1)?
TarasB 15.05.2015 11:05 # +1
TarasB 15.05.2015 11:02 # 0
Да похер, объектный или нет, там текстурирование линии занимало большую часть времени.
Vasiliy 14.05.2015 18:32 # 0
bormand 14.05.2015 18:33 # +5
Ебанись. С этой коллекцией костылей и граблей разве что кресты могут посоревноваться.
kegdan 14.05.2015 19:04 # +1
А ПХП держит второе место с большим отрывом с обеих сторон
Даже тут он не первый...
Vasiliy 15.05.2015 12:13 # +1
Там уже все в норму приходит. Даже GC прикрутили.
Stallman 15.05.2015 12:25 # +4
Vasiliy 15.05.2015 12:44 # 0
Stallman 15.05.2015 13:04 # 0
Vasiliy 15.05.2015 14:53 # 0
mssql
mysql_
function a(&$a,&$b){}
раньше
a(&$a,&$b);
теперь и никак иначе.
a($a,$b);
а еще вот по моему это сомнительно конечно.
но теперь если в предке в метод передается 1 параметр
то в наследнике в одно именном методе должен быть только один параметр.
Stallman 15.05.2015 16:03 # +1
Поясните мысль. (с)
>mysql_
>mssql_
ok
>a(&$a,&$b);
ok
>но теперь если в предке в метод передается 1 параметр
то в наследнике в одно именном методе должен быть только один параметр
E_STRICT, не более того
Для десяти лет получается довольно скромный список. А сколько говнофич было добавлено? Сколько пизданутых опций появилось в блядском php.ini?
Vasiliy 15.05.2015 16:46 # 0
по дефолту строковые функции стали использовать utf-8
E_STRICT
Не отключается это теперь.
Stallman 15.05.2015 17:24 # +1
Но при этом mb_*-говно как было так и осталось.
>Не отключается это теперь
/facepalm. E_STRICT у них не отключается. Вообще охуеть.
Vasiliy 15.05.2015 16:49 # 0
Не стоит забывать это то, что я вспомнил за пару минут пока писал. Если посмотреть изменения от 5.1 до 5.5. убрано достаточно много.
3_14dar 16.05.2015 01:12 # 0
bormand 15.05.2015 12:41 # +1
Ага. Перечисли, пожалуйста, какие костыли и грабли были удалены из PHP за последние 10 лет.
В общем-то в крестах та же трабла - ради совместимости всё-всё-всё остаётся на месте. Только новые фишки добавляются.
kegdan 15.05.2015 14:38 # +2
Vasiliy 15.05.2015 14:56 # 0
3_14dar 16.05.2015 01:13 # 0
Vasiliy 16.05.2015 11:26 # 0
Stallman 15.05.2015 12:27 # 0
LispGovno 14.05.2015 07:27 # 0
про вариадик ты конечно забыл sizeof... легко выдает число параметров
bormand 14.05.2015 07:30 # 0
Пример кода можно? На c++98 само собой.
sizeof... же вместе с вариадик шаблонами появился.
Ну и вариадик с sizeof... будет ПОД КАЖДЫЙ ВЫЗОВ КОМПИЛИТЬ НОВУЮ ФУНКЦИЮ. А initializer_list - нет.
LispGovno 14.05.2015 07:52 # −2
ну ты и быдло. только оно считает число скомпилированных функций. и причем тут срр98? на дворе уже 2015 на тот случай если ты еще не заешь
TarasB 13.05.2015 12:46 # +3
LispGovno 14.05.2015 07:34 # 0
быдлятно сильно
в классе МАССИВЫ вызывается член КАК СПИСОК для преобразования из ПАРАМЕТРОВ в СПИСОК
ну а в общем кроме названного борми: например создатели буста в своей уютной конфочке батхертели от std::make_unique, что создается 100500 шаблонов на каждую комбинацию аргументов
3_14dar 14.05.2015 07:52 # −3
LispGovno 14.05.2015 07:55 # 0
3_14dar 14.05.2015 23:16 # −2
TarasB 15.05.2015 11:06 # +4
3_14dar 16.05.2015 01:14 # −1
guest 16.05.2015 01:16 # +1
попутного ветра
kegdan 16.05.2015 05:12 # 0
3_14dar 16.05.2015 06:58 # −1
Vasiliy 16.05.2015 11:26 # +1
kegdan 16.05.2015 14:58 # +1
Lopata 16.05.2015 16:05 # +5
bormand 16.05.2015 09:02 # +8
Под ним крестовый стандарт, повиси-ка на нём,
А когда надоест, возвращайся назад
Писать на скриптах, писать на скриптах,
Писать на скриптах со мной.
bormand 13.05.2015 09:15 # +3
Теперь жавабляди соснули? :)
LispGovno 14.05.2015 07:40 # 0
bormand 14.05.2015 07:45 # 0
LispGovno 14.05.2015 07:54 # 0
bormand 14.05.2015 08:12 # 0
Почему? Тип известен - std::vector<int>. Нормально компилится.
http://ideone.com/Ln8gMH
bormand 13.05.2015 09:29 # 0
А если boost::any или boost::variant во втором параметре мапа поюзать - то и типы можно будет произвольные передать...
crastinus 13.05.2015 06:50 # 0
Что написал выше можно породить из const char*.
bormand 13.05.2015 07:14 # 0
crastinus 13.05.2015 07:27 # 0
http://govnokod.ru/18153#comment285879
bormand 13.05.2015 07:28 # 0
crastinus 13.05.2015 07:30 # 0
bormand 13.05.2015 07:50 # 0
bormand 13.05.2015 07:27 # 0
inkanus-gray 12.05.2015 21:07 # 0
bormand 12.05.2015 21:24 # +1
roman-kashitsyn 13.05.2015 09:37 # 0
bormand 13.05.2015 09:41 # 0
Но сама идея с uniform initializer мне вообще не нравится. Путаницы много создаёт.
roman-kashitsyn 13.05.2015 09:44 # 0
Тогда вроде путаницы не должно было быть.
bormand 13.05.2015 09:46 # 0
Тогда уж
kegdan 13.05.2015 09:50 # 0
bormand 13.05.2015 09:57 # 0
kegdan 13.05.2015 09:59 # 0
bormand 13.05.2015 10:02 # +1
Да, чтобы майндфака было побольше. Ну и { } чуть более строгие, чем (): Вот все допустимые варианты: http://en.cppreference.com/w/cpp/language/list_initialization
kegdan 13.05.2015 11:24 # +1
bormand 13.05.2015 11:34 # +1
a{ } - новый инициализатор, [](){} и []{} - лямбды, >> - закрывашка от шаблона.
1024-- 13.05.2015 11:37 # 0
bormand 13.05.2015 11:43 # 0
1024-- 13.05.2015 11:49 # 0
P.S. list comprehension тоже есть
https://msdn.microsoft.com/ru-ru/library/dd233214.aspx
crastinus 13.05.2015 12:53 # 0
http://en.cppreference.com/w/cpp/utility/integer_sequence
roman-kashitsyn 13.05.2015 11:59 # 0
Просто литерал, нотацию из Ocaml позаимствовали.
roman-kashitsyn 13.05.2015 10:43 # 0
Да не то чтобы прям много, зато однозначно всё, и можно всюду юзать одни и те же фигурные скобки, а не напрягать мозг каждый раз: какие же скобки тут удобнее и правильнее?
LispGovno 14.05.2015 07:43 # 0
а зачем напрягать? их всего два вида для инициализации
roman-kashitsyn 14.05.2015 09:49 # 0
guest 12.05.2015 20:34 # +1