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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
#1

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

03.10.2011, 18:17. Просмотров 642. Ответов 11
Метки нет (Все метки)

Здравствуйте!
Будет ли этот код
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++
1) Собственно, как работает такой конструктор? Хотелось бы какой-нибудь пример. 2) Сильно ли различаются по скорости new/notthrow...

Почему для временного безымянного объекта не вызывается оператор ()? - C++
Почему AddValue(value)(*pos); не вызывает operator()(int &elem) из класса AddValue? class AddValue { public: AddValue(int...

Как изменить форму результата временного интервала? - C++
Подскажите,как в данной программе,результатом вычисления которой, является разность между двумя датами,сделать, чтобы на выходе было...

Бесконечный цикл (как избежать?) - C++
Программа должна принимать только одно из трёх значений переменной 'destiny'. Если вводят любое другое значение, программа должна повторять...

Как избежать ошибок линковщика? - C++
Я только-только начал изучать С++(Borland). Взял первый попавшийся пример из helpa - printf #include <stdio.h> #include <string.h> ...

Как избежать зацикливание ввода не числа? - C++
Как избежать зацикливание ввода не числа? чтобы при вводе символа не уходил в бесконечный цикл. Пример: #include <iostream.h> ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
03.10.2011, 18:20     Как избежать постоянных инициализаций временного объекта? #2
Никакой оптимизации не будет. Каждый раз buffer будет переопределяться. А в стеке он будет или в кучи роли никакой.
soft.creator
103 / 103 / 4
Регистрация: 17.10.2010
Сообщений: 283
03.10.2011, 18:21     Как избежать постоянных инициализаций временного объекта? #3
Насколько я знаю, нормальный компилятор способен убрать временный объект в варианте А.
Особенно с учетом того, что оператор ++, скорее всего, будет сгенерирован как inline.
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
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
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
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
03.10.2011, 18:44     Как избежать постоянных инициализаций временного объекта? #8
Цитата Сообщение от romex Посмотреть сообщение
const int& d
это зачем? 4-х байт не хватает?
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
03.10.2011, 20:16     Как избежать постоянных инициализаций временного объекта? #9
romex, преждевременная оптимизация - зло.
romex
44 / 44 / 4
Регистрация: 11.04.2010
Сообщений: 223
04.10.2011, 07:59  [ТС]     Как избежать постоянных инициализаций временного объекта? #10
Цитата Сообщение от silent_1991 Посмотреть сообщение
romex, преждевременная оптимизация - зло.
К сожалению это уже постоптимизация.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 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++
Сделал в проге кучу классов и кучу указателей на них. В итоге при компиляции выдает кипу ошибок: Почти все или все они связаны с...

Как избежать switch case и преобразования типов? - C++
Подскажите пожалуйста, есть класс , допустим ,Automobile , есть наследники этого класса, допустим Automobile_Model_1, Automobile_Model_2, и...


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

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru