c++ - 函数式 C++11 奇怪的行为

标签 c++ pointers c++11 function-pointers

为什么这一行不编译:

function<const int&(const int&, const int&)> min_ptr = min<int>;

但这工作正常:

const int &(*min_ptr)(const int&, const int&) = min<int>;

函数类似乎是函数指针的灵活且舒适的替代品。但为什么这种情况不起作用?

编辑。我的代码:

#include <functional>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
    const int&(*min_ptr)(const int&, const int&) = min<int>; //It is works fine
    function<const int&(const int &, const int&)> min_f = min<int>;// Doesn't compile
    /*
       Error message:
        error: conversion from ‘<unresolved overloaded function type>’ to non-scalar type 
        ‘std::function<const int&(const int&, const int&)>’ requested function<const int&(const int &, const int&)> min_f = min<int>;
    */
    return 0;
}

gcc 版本 4.8.2,--std=c++11

最佳答案

分配给

const int &(*min_ptr)(const int&, const int&)

还转换了min<int>到一个特定的签名。投给std::function没有。

添加

 static_cast<const int &(*)(const int&, const int&)>

std::function分配以使其工作。

auto* min_ptr = min<int>;

也无法正常工作。

min<int> 的重载不止一次考虑。

std::function<const int&(const int &, const int&)> min_ptr =
  [](auto&&...args)->decltype(auto){
    return min<int>(decltype(args)(args)...);
  };

也适用于 C++14。

关于c++ - 函数式 C++11 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32268765/

相关文章:

c++ - 重载 [][] 运算符 c++

c - 在 C 中什么时候应该使用双指针作为函数参数?

c++ - 使用 void 指针在 C++ 中打印数组

c - 释放指针

c++ - 将(部分)模板化模板函数作为 std::function(或函数指针)传递

C++ 指向重载函数的指针

c++ - 以 cv::Point 为键的 std::map

c++ - Boost Spirit x3 未编译

c++ - 函数的返回类型可以从函数内部获取吗?

c++ - 带空的算术运算?