Вот функция: void func () ;
Объясните пожалуйста разницу между этим void ( * const pointFunc ) () = func ;
И этим: void ( & refFunc ) () = func ;
По последнему варианту ничего не нашел, у Страуструпа тоже нету, и гуглятся только варианты с указателем на функцию.
Про указатели на функции знаю, но ссылки на них это что то новое.
Такой вариант компилится у меня даже с -c++ 98, тогда почему примеров его использования нигде не заметно, удобнее ведь вместо константного указателя.
почему примеров его использования нигде не заметно, удобнее ведь вместо константного указателя.
Чем удобнее-то? Ссылку нужно инициализировать в момент создания и нельзя изменить потом. Функцию в C++ нельзя создать или вернуть из функции, зачем ссылка?
Ну, ссылки на функции можно возвращать из функции. Или это бесполезно?
#include
void writeOne()
{
std::cout<<1;
}
void (&getRef())()
{
return writeOne;
}
int main()
{
void (&fn)()=getRef();
fn();
}
> ссылки на функции можно возвращать из функции
и указатели можно возвращать из функции. Но в случае объектов константной ссылкой можно удлинить время жизни объекта, который вернулся, а в случае функции это не нужно.
> По мне это выглядит лучше чем вариант с указателями
Чем лучше? Заменой одного символа на другой? Со * вместо & всё будет работать точно так же.
Ссылки по внутреннему устройству это указатели, поэтому их часто можно использовать в таких же целях. Они безопаснее и удобнее, но есть ограничения. Ограничения накладывает компилятор.
int a= 10;
int& b = a; //int *b = &a;
b = 5; //*b = 5;
cout << a << endl;