- 1
TPrimitive a((TLine())), b((TCircle()));
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+7
TPrimitive a((TLine())), b((TCircle()));
Вынужденный говнокод.
Должно быть:
TPrimitive a(TLine()), b(TCircle());
HaskellGovno 16.08.2012 12:50 # +2
defecate-plusplus 16.08.2012 13:03 # +5
absolut 16.08.2012 13:31 # +2
govnomonad 16.08.2012 14:44 # +2
http://iproc.ru/2012/08/cpp-copy-constructor/
HaskellGovno 16.08.2012 14:50 # +2
defecate-plusplus 16.08.2012 14:51 # +4
http://ideone.com/rQTUO
absolut 16.08.2012 15:09 # +7
Интересно, это как-то связано со ссылкой "Функция — конопля" после статьи?
bormand 16.08.2012 15:34 # +3
Процитирую C++98 12.6.1 Explicit Initialization
An object of class type can be initialized with a parenthesized expression-list, where the expression-list is
construed as an argument list for a constructor that is called to initialize the object. Alternatively, a single
assignment-expression can be specified as an initializer using the = form of initialization.
Автор точно ебанулся. Там же в стандарте и пример есть, в котором Complex инициализируют тройкой.
P.S. Комментарий от автора статьи
Всё сказанное здесь не относится к Visual Studio. В этой системе, вопреки стандартам, инициализация равенством эквивалентна инициализации скобками
Как-будто в gcc не так...
bormand 16.08.2012 15:37 # +5
HaskellGovno 17.08.2012 00:33 # +1
roman-kashitsyn 17.08.2012 00:45 # +5
императивное присваивание
P.S. Из ЯП самые годные равенства в MetaFont - они умеют решать линейные уравнения (присваивание там осуществляется отдельным оператором :=)
HaskellGovno 17.08.2012 00:51 # +3
Подтвержу этого КО.
defecate-plusplus 16.08.2012 15:51 # +1
будем честны
стандарт различает direct-initialization (mytype a(1);) от copy-initialization (mytype a = 1;) - например, 8.5/14 + 12.3.1
но в том же 8.5/14 написано про copy-initialization In certain cases, an imple-mentation is permitted to eliminate the copying inherent in this direct-initialization by constructing
the intermediate result directly into the object being initialized; see 12.2, 12.8.
bormand 16.08.2012 17:26 # +2
tion is a constructor, the call initializes a temporary of the destination type. The result of the call
(which is the temporary for the constructor case) is then used to direct-initialize, according to the
rules above, the object that is the destination of the copy-initialization.
Семантика такова, что создается временная переменная (хотя компилятор, конечно, может этим и не заниматься)... Т.е. автор все-таки был прав, что copy-initialization может оказаться медленнее, чем direct-initialization.
P.S. Но вот "вопреки стандарту" автору я не прощу ;)
P.P.S. Вот за что я люблю и одновременно ненавижу с++ - так это то, что каждый месяц я узнаю какую-нибудь новую его тонкость.
guest 06.11.2012 08:22 # +1
Вам довелось наткнуться на довольно сырой вариант статьи, с которым я и сам уже не согласен. С тех пор я многое исправил, в том числе терминологию, цитаты из стандарта, изменил общий тон в сторону более нейтральной точки зрения.
bormand 06.11.2012 11:23 # +1
Хм, интересный факт. Спасибо за инфу ;)
defecate-plusplus 06.11.2012 11:29 # +1
но этим флагом обычно никто не пользуется
guest 06.11.2012 20:37 # +1
TarasB 06.11.2012 12:00 # +2
defecate-plusplus 06.11.2012 12:02 # −1
TarasB 06.11.2012 12:06 # +2
Харе придуриваться.
defecate-plusplus 06.11.2012 12:14 # +1
поэтому что конкретно ты про "= запрещено" имеешь в виду - конструктор копирования в привате, оператор присваивания в привате, корпоративные запреты на = (может твоему начальству приятно глазу только :=, и поэтому использование в любых языках = и == строго запрещено с занесением, следует применять методы eq и ass)
Dummy00001 16.08.2012 13:26 # 0
vistefan 16.08.2012 13:33 # 0
> Dummy00001 7 минут назад
Ви, таки, комментариев не читаете?
roman-kashitsyn 16.08.2012 13:34 # +2
rat4 16.08.2012 13:46 # +3
bormand 16.08.2012 13:35 # +3
Dummy00001 16.08.2012 13:41 # +4
читаю. но честно говоря я и не уловил что defecate-plusplus хотел сказать.
"Talk is cheap. Show me the code" (c) Linus Torvalds
defecate-plusplus 16.08.2012 13:46 # 0
еще хотел сказать, что если конструктор explicit, то букв получится больше, чем ожидается - но мне было лениво
но тут проблема высосана из пальца - какие то пустые конструкторы передаются - так что говнокод не в синтаксисе, а глубже
bormand 16.08.2012 13:50 # 0
HaskellGovno 16.08.2012 14:53 # 0
boost::variant<_>::variant найдешь в гугле
HaskellGovno 16.08.2012 14:57 # +3
Dummy00001
>TPrimitive a = TLine(), b = TCircle();
http://ideone.com/2sfxa
TPrimitive библиотечный, писал его не я и менять не могу.
defecate-plusplus 16.08.2012 14:58 # +3
Dummy00001 16.08.2012 15:09 # −3
так а где все определения? ясно что на пустом примере оно работать не будет.
то что defecate про explicit говорит, и что для 100% надежности я должен был написать, выглядит вот так:
HaskellGovno 16.08.2012 15:56 # −3
> TPrimitive a = TPrimitive(TLine());
> TPrimitive b = TPrimitive(TCircle());
http://ideone.com/5aOXM
http://ideone.com/SQDyX
результат: я успешен
defecate-plusplus 16.08.2012 16:18 # 0
vistefan 16.08.2012 17:01 # +5
Да, да, цитирование с тегами.
Я бы не стал так радикально заявлять. Гляньте, вас же на говнокодике минусуют.
bormand 16.08.2012 17:03 # +3
vistefan 16.08.2012 17:04 # +1
Не начать ли мне пиписюнческую деятельность, что бы стать успешым?
HaskellGovno 16.08.2012 18:40 # −1
Я лишь процитировал результат компиляции в ideone.com
vistefan 16.08.2012 19:01 # +3
1. Нет болда
2. Пишут "успешно", а не "успешен"
3. Не пишут местоимение "я успешен", которое вы так аккуратно затёрли при цитировании с тегами, что бы снять с себя подозрение.
Так что ваше "лишь процитировал" - враки. Не цитата это.
Но все ходы записаны, изначально было
>> результат: я успешен
HaskellGovno 16.08.2012 21:36 # 0
Dummy00001 16.08.2012 17:30 # −4
в чем ты успешен??? в том что ты две функции - a и b - объявил?
оно у тебя компилируется потому что ничего не делает.
ГК сверху как раз есть (кривоватая и непортабельная) попытка создать два объекта - a и b.
HaskellGovno 16.08.2012 18:38 # +2
Lolshito?
Оно компилируется так как и задумывалось. Какие функции? Стандарт языка что-ли ещё наизусть не выучил?
Вот доказательство, что-никаких функций a и b нет:
http://ideone.com/67pPg
Try 16.08.2012 22:28 # −2
HaskellGovno 17.08.2012 00:30 # +1
HaskellGovno
> TPrimitive библиотечный, писал его не я и менять не могу.
Что в этих словах тебе не понятно? Могу пояснить по хардкору.
guest 17.08.2012 19:24 # +1
HaskellGovno 17.08.2012 21:41 # −1
HaskellGovno 17.08.2012 21:42 # −1