spamsink: (Default)
[personal profile] spamsink


Кто может объяснить, зачем push_back типа void, а не типа ссылки на контейнер? Зачем заставлять меня делать нелепые телодвижения ради возможности писать container.push_back(x).push_back(y).... ? Почему сразу нельзя было?

Date: 2011-06-07 08:12 pm (UTC)
From: [identity profile] dvv.livejournal.com
Шоб неповадно было.
Заведи свой темплит.

Date: 2011-06-07 08:14 pm (UTC)
From: [identity profile] dvv.livejournal.com
Такие колбасы писать.

Date: 2011-06-07 08:20 pm (UTC)
From: [identity profile] dvv.livejournal.com
Автомат чинить надо. Или его половину.

Date: 2011-06-07 08:23 pm (UTC)
From: [identity profile] rezkiy.livejournal.com
возможность писать container.push_back(x).push_back(y) -- путь на темную сторону силы. Вот бросила эта штука исключение, сколько элементов в листе?

Date: 2011-06-08 12:11 am (UTC)
From: [identity profile] yatur.livejournal.com
А на светлой стороне силы вокруг каждого оператора try-catch стоит?

Другое дело, что темная сторона силы может вылезти в каких-нибудь побочных ффектах. Типа

container.push_back(x++).push_back(x++); - это, надо полагать, undefined behavior. А

container.push_back(x++);
container.push_back(x++); - нет.


Date: 2011-06-08 07:50 am (UTC)
From: [identity profile] rezkiy.livejournal.com
это не единственный путь на темную сторону силы. А try-catch вокруг _каждого_ оператора -- явный признак неудачно выбранного языка программирования.

Date: 2011-06-08 01:08 am (UTC)
From: [identity profile] sab123.livejournal.com
Они таким образом борются за эффективность. Из тех же соображений разделены front() и pop_front().

Date: 2011-06-08 01:41 pm (UTC)
From: [identity profile] anatoly borodin (from livejournal.com)
pop() и front() разделены правильно.

http://ptgmedia.pearsoncmg.com/images/020163371x/supplements/Exception_Handling_Article.html

Date: 2011-06-08 01:45 pm (UTC)
From: [identity profile] anatoly borodin (from livejournal.com)
Вот ссылка получше: accu.org/index.php/journals/444

Date: 2011-06-09 12:41 am (UTC)
From: [identity profile] sab123.livejournal.com
В-общем, мораль: от исключений никакой пользы помимо вреда.

Date: 2011-06-08 04:19 am (UTC)
ak_47: (Default)
From: [personal profile] ak_47
Скорее всего сделано для симметрии с другими подобными функциями: push_front, pop_back, pop_front.

Вдогонку. Хоть формально и не могу объяснить, но интуитивно мне не нравится код вида: container.push_back(x).push_back(y). Как и многие другие тоже отметили. Есть в этом что-то не то. Если речь идёт о генерации кода (каковая сама по себе далеко не мейнстримная задача, заметим), то сгенерить container.push_back(x); container.push_back(y); точно так же легко. Так что этот аргумент я не могу принять.

Date: 2011-06-08 05:08 am (UTC)
ak_47: (Default)
From: [personal profile] ak_47
Не угодило тем что возврат ссылки на контейнер из всего что не оператор = выглядит странно и неуместно. Единственный осмысленный тип, который могли бы возвращать подобные функции, это ссылка/итератор на элемент контейнера, над которым совершается действие. Но некоторые из них не могут возвращать такой тип из-за ограничений накладываемых by exception safety requirements. Поэтому наверное решили привести их всех к общему знаменателю, т.е. void.

Date: 2011-06-08 05:41 am (UTC)
ak_47: (Default)
From: [personal profile] ak_47
Я имею в виду ссылку на себя из других методов контейнера (и просто класса в общем случае). Возвращение ссылки на себя не из операторов и не из специальных методов, типа self() - это скорее Java-изм. Формально, конечно, это не запрещено, но внутреннее чувство прекрасного противится.

Date: 2011-06-08 06:11 am (UTC)
ak_47: (Default)
From: [personal profile] ak_47
Так всё равно заводить переменную для контейнера надо. И к тому же, не следует слепо избегать локальных переменных. Иначе получаются всем известные Жаба-ужасы с 15-ю сцепленными вызовами.

Компилятор выкинет лишние локальные переменные, а вот readability пострадает.

Date: 2011-06-08 06:33 am (UTC)
ak_47: (Default)
From: [personal profile] ak_47
Readability - хороший культ. От него пользы больше чем вреда. А про генерацию - так это и есть довольно маргинальная задача.

Итого: вопрос о том почему push_back возвращает void - стилистический. Так решили создатели стандартной библиотеки следую сложившемуся стилю в С++.

Date: 2011-06-08 09:15 am (UTC)
From: [identity profile] rezkiy.livejournal.com
Работать не унизительно :-)

Date: 2011-06-08 07:55 am (UTC)
From: [identity profile] rezkiy.livejournal.com
+1

Вот цитата из Степанова:

There is a sad obligation to return a reference from the assignment. C introduced the dangerous ability to write a = (b = c). C++ made it so that we can write the even more dangerous (a = b) = c. I would rather live in a world where assignments return void. And while we are forced to make our assignments to conform to the standard semantics, we should avoid using this semantics in our code. (This is similar to Jon Postel’s Robustness Principle: “TCP implementations will follow a general principle of robustness: be conservative in what you do, be liberal in what you accept from others.”)

Date: 2011-06-08 08:44 am (UTC)
From: [identity profile] rezkiy.livejournal.com
это не язык а всего лишь стандартная библиотека. При написании STL мнение Степанова, предпочитающего void-ы, очевидно учитывалось. А в стандартную библиотеку оно попало явочным порядком.

Date: 2011-06-08 09:14 am (UTC)
From: [identity profile] rezkiy.livejournal.com
я не согласен по всем трем пунктам, и согласен дальше не соглашаться, т.е. я считаю, что стандартная библиотека не часть языка, вкусовщина при выработке стандартов уместна, а фаворитизм неизбежен, особенно в ситуациях когда есть несоменные лидеры индустрии. Это цена прогресса. Лучше застолбить что-то и двигаться вперед, чем придумывать эксперанто.

Date: 2011-06-08 06:51 am (UTC)
From: [identity profile] malaya-zemlya.livejournal.com
Чтобы кто не подумал, что программирует на джаве.

Date: 2011-06-08 07:55 am (UTC)
From: [identity profile] http://users.livejournal.com/_navi_/
скорее, на хаскелле, тогда уж

Date: 2011-06-08 06:27 pm (UTC)
From: [identity profile] ivan-ghandhi.livejournal.com
Because most of the programmers are assholes.

That's why.

They don't care about you.

API designers are a special kind of assholes. They are happy to make you jump through the loops.

Date: 2011-06-09 06:57 am (UTC)
From: [identity profile] boris71.livejournal.com
Use the source, Luke...

Впрочем, именно это ты и сделал... А вообще - да, иной раз такие вещи сильно раздражают.

Profile

spamsink: (Default)
spamsink

February 2026

S M T W T F S
12345 67
8 91011 121314
15161718 192021
22 2324 25262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 5th, 2026 06:06 am
Powered by Dreamwidth Studios