Имя пользователя:
Пароль:
 

Показать сообщение отдельно

редкий гость


Сообщения: 1696
Благодарности: 44

Профиль | Сайт | Отправить PM | Цитировать


VuDZ
Цитата:
хотя страница у него хорошая, часто посматриваю
А кто тебе на него ссылку дал? Уж не я ли?

Цитата:
приятнее читать запись типа c = a + b * d, нежели c = a.Add(b.Mul(d))
На само деле, второй вариант, обычно производительнее. Т.к. тогда можно самому контролировать создание временных объектов:
Код: Выделить весь код
c = a + b * d;
Два временных объекта: (b*d) и (a + (тут первый временный объект)).

В случае:
Код: Выделить весь код
Assign( &c, Add( a, Mul( b, d ) ) );
тоже два временных объекта: то что вернйт Mul( b, d ) и что вернёт Add( a, Mul( b, d ) )

Но мы можем это прооптимайзить это ручками:
Код: Выделить весь код
Assign( &c, Multiply_Add( b, d, a ) )
Уже один временный объект. Или дальше:
Код: Выделить весь код
Multiply_Add_Assign( b, d, a, &c );
Ни одного. Т.е. они скорее всего будут, но будут спрятаны внутри этой функции, и скорее всего, как-то прооптимизированы программистом.

С операторами такое не прокатит. Хотя, я недавно прочитал "Дизай и эволюци C++" by Straustrup, так он хотел ввести перегрузку нескольких операторов сразу. Т. ечто-то вроде этого:
Код: Выделить весь код
class some_class
{
    some_class & operator = + * ( const some_class & a,
                                  const some_class & b,
                                  const some_class & d );
}
И теперь c = a + b * d будет полным аналогом Multiply_Add_Assign( b, d, a, &c ); Только гораздо приятнее выглядеть... Не помню почему это отклонили, но предложение интересное.

Добавлено:

Что-то я увлёкся -- в тему "Как стать программистом..." это не катит

-------
http://ivank.ru


Отправлено: 01:36, 02-03-2002 | #4