我正在阅读其他人的代码,其中包含类似于boost::function
or 的自定义函数类std::function
。他们通过不断的引用来传递这些函数类。在关键路径的一节中,他们选择使用函数指针,但仍然通过不断引用来提高效率
他们的代码中有类似的内容:
using FuncT = int(*)(int, int);
这是这样传递的:
const FuncT&
我认为const FuncT&
传递的效率并不比它高,FuncT
而且语法只是最初的自定义函数类的剩余部分。然而这让我想知道这是什么const FuncT
意思
#include <iostream>
using FuncT = int(*)(int, int);
struct MyClass final {
static int myMethod(int a_arg1, int a_arg2) {
std::cout << a_arg1 << " " << a_arg2 << std::endl;
return 0;
}
// Similar to what I found in someone's code
void v1(const FuncT& a_func) { a_func(1, 1); }
// A reference to a const function pointer seems meaningless, it should be
// just as efficient to copy the pointer
void v2(const FuncT a_func) { a_func(2, 2); }
// ^
// Removed reference
// I believe this is the syntax for a function pointer that cannot be
// modified to point to a different function
void v3( int(* const a_func)(int, int)) { a_func(3, 3); }
// ^
// Added const not present in FuncT
// This compiles but I don't know what the intended meaning of the extra
// const would be
void v4(const int(* const a_func)(int, int)) { a_func(4, 4); }
// ^
// Added const not present in v3
};
int main() {
MyClass myClass;
myClass.v1(&MyClass::myMethod);
myClass.v2(&MyClass::myMethod);
myClass.v3(&MyClass::myMethod);
//myClass.v4(&MyClass::myMethod); // Doesn't compile
return 0;
}
上面的代码v4
可以编译,但是最左边的含义是什么const
?
对您的代码进行少量修改:
a_func
是const
你无法修改它。尝试分配给它会引发错误。这里:
与上面相同,但函数的返回类型
const int
不是int
:现场演示
函数指针的语法很奇怪,这就是为什么我们尽可能频繁地使用别名。为了获得全面的解释,我建议您参阅相应的文献。在这种情况下,它只是
returntype (* outer_most_const)(parameter_types)
,而使用别名时,using f = returntype (*)(parameter_types)
您可以添加最外层的 const viaconst f
。