|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.07.2011, 20:10 | #11 | ||
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
Цитата:
Цитата:
http://programmersforum.ru/showpost....44&postcount=7 И был приведен конкретный пример (A+B).func () , а не какая-то белеберда, как в вашем примере Работа со своими типами данных это совсем другое. Последний раз редактировалось An1ka; 06.07.2011 в 21:03. |
||
07.07.2011, 09:52 | #12 | ||
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
Цитата:
И подобные выражения Цитата:
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
||
07.07.2011, 18:17 | #13 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Белиберду как раз пишите вы! Я вам еще раз повторяю, что нарушается семантика операции. Что касается вашего, якобы, "конкретного" примера, то это очередная глупость! A + B - это временный объект, поэтому в принципе бессмысленно вызывать для него функции, которые его меняют! Но для временного объекта вы можете вызывать функции, которые не меняют временный объект, то есть константные. Поэтому если вам так уж нужно вызвать функцию, то вы можете записать (A + B).func(), только функция будет с квалификатором const. Даже одного вашего ответа на первый вопрос про, якобы, какую-то оптимизацию при передачи функции объекта по значению, говорит о вашей крайней безграмотности как программиста С++. Для своих параметров функции выделяют память в стеке, куда и заносят переданные им аргументы. И работают функции именно с тем, что у них в стеке. А в стеке как-то должны появиться эти значения. Согласно же вашим безграмотным рассуждениям они там появятся неизвестно как. Вы, как говорится, слышали звон про оптимизацию, но не знаете, где он, то есть в каких случаях эта оптимизация выполняется!
Со мной можно встретиться на www.clipper.borda.ru
|
|
07.07.2011, 18:19 | #14 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Со мной можно встретиться на www.clipper.borda.ru
|
|
07.07.2011, 19:17 | #15 |
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
|
07.07.2011, 19:20 | #16 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
(A + B).f() При этом семантика опратора, которая имеет место быть для встроенных типов не нарушается, так как значение выражения при этом не меняется.
Со мной можно встретиться на www.clipper.borda.ru
|
|
07.07.2011, 19:33 | #17 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
2Сыроежка
Вынужден частично согласится с An1ka, современные компиляторы очень хороши в плане оптимизаций, и могут оптимизировать возврат значения из функции так, чтобы не создавалось временных объектов. С другой стороны, не всё и не всегда удаётся оптимизировать, потому особо полагаться на эти оптимизации не стоит, тем более на те, что не гарантированы стандартом. И не стоит постоянно говорить о безграмотности друг друга, тем более вы не знакомы лично и не можете судить об этом наверняка. 2Химик, если ваши объекты становятся слишком тяжёлыми для передачи их по значению, Вы можете воспользоваться разделяемым хранилищем основных данных и подсчётом ссылок на них, как это реализовано в классе string. Детальнее на эту тему можете почитать у Страуструпа Последний раз редактировалось netrino; 07.07.2011 в 19:35. |
07.07.2011, 19:41 | #18 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Вы пишите очередную глупость! Читайте внимательно, что я пишу! Никакой, повторяю специально для вас, никакой оптимизации при передачи аргумента параметру по значению не происходит! Я уже несколько раз это написмал, вы тот же самый бред, как попугай, повторяете!
Со мной можно встретиться на www.clipper.borda.ru
|
|
07.07.2011, 20:15 | #19 |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Ну тогда, быть может, Вы тоже внимательно прочтёте, что написал я?) И не нужно так нервничать, успокойтесь.
|
07.07.2011, 20:22 | #20 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Что я должен извлечь из прочситанного?! То, что вы не знаете языка С++? Это я вижу! Я вам еще раз повторяю, что если вы не собираетесь изменять объект, то передавайте его в функцию по константной ссылке, а не по значению. Иначе у вас будут большие накладные расходы по выделению памяти в стеке под объект и вызовы конструкторов и деструкторов. Что вам не понятно?!!! По значению можно передавать лишь встроенные типы, а не типы пользователей, которые к тому же имеют свойство во время своей жизни меняться в сторону уыеличения.
Со мной можно встретиться на www.clipper.borda.ru
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++ Перегрузка оператора += и >> | Jane-sad | Помощь студентам | 4 | 01.03.2013 15:38 |
Перегрузка бинарного оператора + | EC.cpp | Общие вопросы C/C++ | 4 | 10.04.2011 00:32 |
Перегрузка оператора + | Jane-sad | Помощь студентам | 0 | 05.10.2010 13:52 |
перегрузка оператора -> | alex_alpha | Общие вопросы C/C++ | 5 | 23.06.2010 19:07 |
Перегрузка оператора | Crucian | Общие вопросы C/C++ | 2 | 22.10.2007 09:44 |