- ли оба этих деклараций
setEvalFunction
эквивалент
Да.
- В чем разница между следующими параметрами (так как оба кажутся хорошо работающими).
Я считаю, что 2. б) R (* const & fptr)(/*args*/)&
плохо сформированный, так как (не являющийся член) указатель функции не может иметь реф-классификатор, который является то, что конечным &
обозначает. Однако, возможно, из-за ошибки компилятора мой GCC принимает его и анализирует его так же, как R (* const & fptr)(/*args*/)
. EDIT: clang правильно отказывается компилировать его.
Я хочу иметь что-то эквивалентное 1 а), т.е. передавая ссылку на постоянная указатель на функции, но без использования некоторого дополнительного определения, как с помощью EvalFunctionPtr = ....
Это вполне подходящее описание 1. б).
Передача значения указателя функции проходит 64-битное целое число (в моем случае 64-битной системы), которая не является таким же, как передавая ссылку указателя функции, так как ссылка, применяемый компилятор и занимает нулевое время во время выполнения. Но копия целого занимает время, не так ли?
Передача справки не занимает нулевого времени во время выполнения. На самом деле, передавая ссылочный аргумент функции практически копирования (вероятно, 64 бита в вашем случае) адрес указателя и разыменования его (если вы на самом деле доступ ссылки), что больше, чем просто копирование в случае прохождения указатель по значению. Если функция была расширена встроенным оптимизатором, то, вероятно, нет никакой разницы в любом случае.
Почему бы не использовать 'std :: function'? –
Я не думаю, что вам нужно беспокоиться о ссылке вообще. Это 'const', поэтому вы не можете его изменить, и стоимость передачи указателя функции должна быть такой же, как передача ссылки на указатель функции. – user4581301
Я не использую функцию std: function, потому что она медленнее.Передача значения указателя функции передает 64-битное целое число (в моем случае 64-битной системы), что не совпадает с передачей ссылки на указатель функции, так как ссылка применяется компилятором и занимает нулевое время во время выполнения. Но копия целого занимает время, не так ли? – xamid