我有两个问题
为
using EvalFunctionPtr = T (*)(const std::vector<T>&);
?a) void setEvalFunction(const EvalFunctionPtr& evalFunc);
b) void setEvalFunction(T (* const &evalFunc)(const std::vector<T>&));
a) T (* const &evalFunc)(const std::vector<T>&)
b) T (* const &evalFunc)(const std::vector<T>&)&
我想要具有等于1 a)的东西,即将引用传递给常量函数指针,但不使用
using EvalFunctionPtr = ...
这样的额外定义。 最佳答案
是。
我确实相信2. b)R (* const & fptr)(/*args*/)&
格式错误,因为(非成员)函数指针不能具有ref限定符,这就是最终&
所表示的含义。但是,可能由于编译器错误,我的GCC确实接受了它并将其解析为与R (* const & fptr)(/*args*/)
相同。编辑:clang正确拒绝对其进行编译。
这是对1. b)的恰当描述。
在运行时,传递引用不会花费零时间。实际上,将引用参数传递给函数实际上是复制指针的地址(在您的情况下,可能为64位)并取消引用(假设您实际上访问了引用),这不仅仅是在传递参数的情况下进行复制。值指针。如果函数是由优化程序内联扩展的,则两种方法都可能没有区别。