6

使用 GCC 4.8.4 并g++ --std=c++11 main.cpp输出以下错误

error: unable to deduce ‘auto’ from ‘max<int>’
auto stdMaxInt = std::max<int>;

对于此代码

#include <algorithm>

template<class T>
const T& myMax(const T& a, const T& b)
{
    return (a < b) ? b : a;
}

int main()
{
    auto myMaxInt = myMax<int>;
    myMaxInt(1, 2);

    auto stdMaxInt = std::max<int>;
    stdMaxInt(1, 2);
}

为什么它可以使用myMax但不能使用std::max?我们可以让它工作std::max吗?

4

2 回答 2

5

这是因为std::max是一个重载的函数,所以它不知道你要创建一个指向哪个重载的指针。您可以使用static_cast来选择您想要的过载。

auto stdMaxInt = static_cast<const int&(*)(const int&, const int&)>(std::max<int>);
于 2015-11-14T07:21:19.090 回答
2

@JamesRoot的static_cast答案有效,但根据我的口味,我更喜欢 lambda:

auto stdMaxInt = [](int const& L, int const& R) -> int const& { return std::max(L, R); };

当传递给算法(未经测试)时,这可能具有更好的内联能力的优势。

于 2015-11-14T08:53:44.507 回答