powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача параметра по ссылке.
11 сообщений из 11, страница 1 из 1
Передача параметра по ссылке.
    #34195953
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
Передача параметра по ссылке.
    #34195994
3 imho эквивалентно 2, реализованно через указатель
а вот 1 требует вызова конструктора копирования, т.е. создается новый объект

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

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

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

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

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


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

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

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

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

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

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


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