вопрос по functors c++

xoki87

почему при передаче функторов другой функции они передаются по значению, а не по ссылке?

Serab

WAT

PooH

почему при передаче функторов другой функции они передаются по значению, а не по ссылке?
применительно к c++
почему при передаче функторов другой функции они передаются по ссылке, а не по значению?
почему при передаче функторов другой функции они передаются по значению, а не по указателю?
почему при передаче функторов другой функции они передаются по указателю, а не по ссылке?
почему при передаче функторов другой функции они передаются по ссылке и получается Access Violation?
почему при передаче функторов другой функции они передаются по ссылке и получается ошибка типа cannot convert?
короче код покажи, с c++ телепатия плохо работает

apl13

Гугль не помог :( :

istran

Мне кажется тс хотел узнать, почему в C++, во всяком случае в стандартной библиотеке C++, принято передавать функторы по значению.
Каких-то явных преимуществ ИМХО в этом подходе нет, просто так принято.

Serab

Каких-то явных преимуществ ИМХО в этом подходе нет
ну типа за временем жизни следить не приходится.

Maurog

тс хотел узнать, почему в C++, во всяком случае в стандартной библиотеке C++, принято передавать функторы по значению
можно пойти в гугл и найти ответы поинтереснее:
http://stackoverflow.com/questions/8196345/passing-functor-o...
http://stackoverflow.com/questions/17626667/why-function-obj...

istran

Я это читал уже. Главный аргумент там, что компилятору так легче оптимизировать код, что кмк не совсем правда. Если функтор stateless, то компилятору никак не помешает то, что он был передан по ссылке. Если нет, то часто state нужен как раз для того, чтобы передать какие-то результаты наружу, т.е. хранит указатель на внешнюю, относительно функции, переменную, и тут передача по значению оптимизации не поможет.
Вот аргумент, про то что при передаче обычной функции по константной ссылке в С++03 происходила ошибка компиляции, имеет право на жизнь.

apl13

Каких-то явных преимуществ ИМХО в этом подходе нет, просто так принято.
Вероятно, считают странным передавать по ссылке указатель на функцию.
std::function состоит, в основном, из указателя, тоже быстрая вещь.
И полагают, что кто делает класс с operator и копированием на полчаса, тот сам себе любопытная достопримечательность.

apl13

Вот аргумент, про то что при передаче обычной функции по константной ссылке в С++03 происходила ошибка компиляции, имеет право на жизнь.
А, ну да, уже сказали.

rosali

> Каких-то явных преимуществ ИМХО в этом подходе нет
Конешно есть. Если написать прототипы с передачей по ссылке, то передавать можно будет только по ссылке. А если написать прототипы с передачей по значению, то можно сделать враппер-структурку с полем-ссылкой-на-функтор, и её передача по значению будет работать как передача оригинального функтора по ссылке. В итоге с такими прототипами получаются выразимы обе семантики передачи.

istran

А кто мешает в месте вызова создать временный объект-копию и передать ее по ссылке? Ее передача по ссылке будет работать, как передача оригинала по значению.

Dasar

как вариант, функтор передается по значению для того, чтобы оставить возможность делать ленивые вызовы функтора.
если передавать по ссылке, то ленивые вызовы делать нельзя, потому что функтор уже может быть разрушен.

Serab

А кто мешает в месте вызова создать временный объект-копию и передать ее по ссылке? Ее передача по ссылке будет работать, как передача оригинала по значению.
я же написал: время жизни. Если этот функтор захотят сохранить до лучших времен, то возникнут вопросы.
Оставить комментарий
Имя или ник:
Комментарий: