Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача параметра по ссылке. / 11 сообщений из 11, страница 1 из 1
13.12.2006, 11:55
    #34195953
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметра по ссылке.
Задача следующая, что быстрее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
typedef struct {
    //до фига всяких данных
} Struct;

//1.
func (Struct s) {
};

//2.
func (Struct *s) {
};

//3.
func (Struct &s) {
};


Понятно, что 2-й случай быстрее 1-го. А как обстоит дело с 1-м и 3-м?
...
Рейтинг: 0 / 0
13.12.2006, 12:01
    #34195994
Передача параметра по ссылке.
3 imho эквивалентно 2, реализованно через указатель
а вот 1 требует вызова конструктора копирования, т.е. создается новый объект

для простых типов 1 м.б. эффективней
...
Рейтинг: 0 / 0
13.12.2006, 12:22
    #34196100
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметра по ссылке.
Голенков Владимир3 imho эквивалентно 2, реализованно через указатель
а вот 1 требует вызова конструктора копирования, т.е. создается новый объект

для простых типов 1 м.б. эффективней

Тобишь, тоже помещение в стек указаетеля и опрация разыменования? Только скрыто.
...
Рейтинг: 0 / 0
13.12.2006, 12:26
    #34196112
SnowMan2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметра по ссылке.
Скорость скоростью, а еще и работает по разному.
В 1-ом случае изменение данных внутри функции не видимо снаружи, т.к. изменяются данные копии.
В 2 и 3 изменение данных внутри функции видимо, т.к. изменяются данные подлиника.
...
Рейтинг: 0 / 0
13.12.2006, 12:28
    #34196121
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметра по ссылке.
SnowMan2Скорость скоростью, а еще и работает по разному.
В 1-ом случае изменение данных внутри функции не видимо снаружи, т.к. изменяются данные копии.
В 2 и 3 изменение данных внутри функции видимо, т.к. изменяются данные подлиника.

Да. Это-то понятно. Если функция небольшая, а скорость критична, имея полную уверенность, что данные источника не поменяются, можно иногда использовать элементы "плохого стиля".
...
Рейтинг: 0 / 0
13.12.2006, 14:03
    #34196560
Ой Вэй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметра по ссылке.
имея полную уверенность, что данные источника не поменяются
Можно написать const?
Код: plaintext
func (const Struct &s);
...
Рейтинг: 0 / 0
13.12.2006, 14:56
    #34196875
Палестинец
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметра по ссылке.
Понятно, что 2-й случай быстрее 1-го. А как обстоит дело с 1-м и 3-м?
Есть ещё более быстрый способ:

struct
{
...
void func() const
{
}
}


ps. на самом деле конечно та же фигня для _fastcall но для остальных теоритически быстрее да и ООП -валидней :-)
...
Рейтинг: 0 / 0
13.12.2006, 15:22
    #34196988
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметра по ссылке.
читал в одной умной книжке что const должен стоять в каждой функции не меняющей передаваемый параметр. как гарантия того что он действительно н е изменится.

и с тех пор ставлю везде :)

зы
константа
константный указатель
указатель на константу
константный указатель на константу

просто песня :)
...
Рейтинг: 0 / 0
13.12.2006, 15:51
    #34197144
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметра по ссылке.
Значит, в таком случае, самый удобный случай

Код: plaintext
1.
2.
func (const Struct &s) {
};

аналогичный 3-му, но более корректный, коий является равный 2-му, и тоже более корректный.
...
Рейтинг: 0 / 0
13.12.2006, 16:45
    #34197355
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметра по ссылке.
я вот не догоняю по жизни.
а зачем struct писать?
...
Рейтинг: 0 / 0
13.12.2006, 16:45
    #34197356
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача параметра по ссылке.
всё догнал!
извините :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача параметра по ссылке. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]