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

Как избежать постоянных инициализаций временного объекта? - C++

Восстановить пароль Регистрация
 
romex
 Аватар для romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
03.10.2011, 18:17     Как избежать постоянных инициализаций временного объекта? #1
Здравствуйте!
Будет ли этот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class my::testBuffer{ //код А
private:
  int data;
public:
  testBuffer(const int& d ) : data(d)
  {
  }
  int getData()
  {
    return data;
  }
  testBuffer operator++(int)
  {
    return testBuffer( data++ );
  }
};
Проигрывать этому
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class my::testBuffer{ //код Б
private:
  int data;
public:
  static testBuffer buffer;
  testBuffer(const int& d ): data(d)
  {
  }
  int getData()const
  {
    return data;
  }
  const testBuffer& operator++(int)
  {
    buffer=*this;
    data++;
    return buffer;
  }
};
my::testBuffer my::testBuffer::buffer(0);
?

Пытаюсь оптимизировать один из моих " проэктов ", изобилующий решениями как в А с большими классами. Быть может есть способ интереснее, чем Б?

Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2011, 18:17     Как избежать постоянных инициализаций временного объекта?
Посмотрите здесь:

Как правильно вызывать функцию объекта из другой функции того же объекта? C++
C++ Копирование из временного объекта
C++ как избежать зацикливания
C++ Как избежать такую конструкцию?
время жизни временного объекта C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
03.10.2011, 18:20     Как избежать постоянных инициализаций временного объекта? #2
Никакой оптимизации не будет. Каждый раз buffer будет переопределяться. А в стеке он будет или в кучи роли никакой.
soft.creator
 Аватар для soft.creator
103 / 103 / 4
Регистрация: 17.10.2010
Сообщений: 283
03.10.2011, 18:21     Как избежать постоянных инициализаций временного объекта? #3
Насколько я знаю, нормальный компилятор способен убрать временный объект в варианте А.
Особенно с учетом того, что оператор ++, скорее всего, будет сгенерирован как inline.
romex
 Аватар для romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
03.10.2011, 18:21  [ТС]     Как избежать постоянных инициализаций временного объекта? #4
Цитата Сообщение от gooseim Посмотреть сообщение
Никакой оптимизации не будет. Каждый раз buffer будет переопределяться. А в стеке он будет или в кучи роли никакой.
То есть на инициализацию не идет никаких затрат?
Teravisor
30 / 30 / 3
Регистрация: 07.08.2011
Сообщений: 89
03.10.2011, 18:25     Как избежать постоянных инициализаций временного объекта? #5
с включенными оптимизациями у компилятора между этими вариантами разницы нет, остальное зависит от контекста.

З.Ы.
Цитата Сообщение от soft.creator Посмотреть сообщение
Насколько я знаю, нормальный компилятор способен убрать временный объект в варианте А.
Особенно с учетом того, что оператор ++, скорее всего, будет сгенерирован как inline.
Я бы верил вот этому.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
03.10.2011, 18:30     Как избежать постоянных инициализаций временного объекта? #6
romex, инициализация будет и там и там, в конструкторе класса.

Teravisor, не думаю, что 2й вариант компилятор сможет оптимизировать, потому что изменяется статическая переменная. Если он это оптимизирует, значит он не совсем умный.

Добавлено через 1 минуту
soft.creator правильно написал.
Teravisor
30 / 30 / 3
Регистрация: 07.08.2011
Сообщений: 89
03.10.2011, 18:30     Как избежать постоянных инициализаций временного объекта? #7
Цитата Сообщение от gooseim Посмотреть сообщение
Teravisor, не думаю, что 2й вариант компилятор сможет оптимизировать, потому что изменяется статическая переменная. Если он это оптимизирует, значит он не совсем умный.
Не заметил как buffer определяется, пардон.
В таком случае первое быстрее будет т.к. мы постоянно к статику обращаемся(зачем интересно даже?)
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
03.10.2011, 18:44     Как избежать постоянных инициализаций временного объекта? #8
Цитата Сообщение от romex Посмотреть сообщение
const int& d
это зачем? 4-х байт не хватает?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
03.10.2011, 20:16     Как избежать постоянных инициализаций временного объекта? #9
romex, преждевременная оптимизация - зло.
romex
 Аватар для romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
04.10.2011, 07:59  [ТС]     Как избежать постоянных инициализаций временного объекта? #10
Цитата Сообщение от silent_1991 Посмотреть сообщение
romex, преждевременная оптимизация - зло.
К сожалению это уже постоптимизация.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
04.10.2011, 17:34     Как избежать постоянных инициализаций временного объекта? #11
romex, есть основания для оптимизации?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2011, 18:13     Как избежать постоянных инициализаций временного объекта?
Еще ссылки по теме:

C++ Как изменить форму результата временного интервала?
Возвращение временного объекта из метода C++
C++ Почему для временного безымянного объекта не вызывается оператор ()?

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

Или воспользуйтесь поиском по форуму:
romex
 Аватар для romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
04.10.2011, 18:13  [ТС]     Как избежать постоянных инициализаций временного объекта? #12
silent_1991, я могу скинуть тебе код, но надеюсь, что ты поверишь мне на слово - он действительно убог...

Оснований гора, и чем больше я читаю, тем сильнее это чувство. У меня игровой комп, но этот "проект" тормозит даже на нем. Anyway, теперь я понимаю, что нужно оптимизировать алгоритмы, а не пытаться перехитрить компилятор.
Yandex
Объявления
04.10.2011, 18:13     Как избежать постоянных инициализаций временного объекта?
Ответ Создать тему
Опции темы

Текущее время: 09:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru