在 C++ 中返回仿函数的正确方法

Proper way of returning a functor in C++

假设我们有一个这样声明的 add 函数:

int add(const int a, const int b);

如果我们return这个add函数来自foo...

std::function<int(const int, const int)> foo()
{
    return add;
}
std::function<int(const int, const int)> foo()
{
    return &add;
}

以上哪一项是 return 函数对象的正确方法,因为两者的工作方式完全相同?

两个代码片段是相同的(就语言而言)。

std::function 可以从任何可调用对象(无论是 lambda、函数指针等)构造。在这两个示例中,您都使用函数指针构造 std::function

  • 在第一个示例中,add 表示一个函数的名称——它会衰减为一个函数指针。

  • 在第二个示例中,表达式&add 显式获取函数地址,生成函数指针。

没有“正确”的惯例,因为每个惯例都同样有效。代码库中最重要的是一致性和可读性;所以我会坚持现有代码库使用的任何做法,或者您组织的编码约定中规定的任何做法。