numeric_limits :: max和“从'int(*)()noexcept(true)'到'value_t {aka int}'的无效转换”

时间:2014-08-26 22:33:04

标签: c++ templates type-conversion return-type numeric-limits

我有一个使用typedef unsigned int value_t;定义的类型和一个函数

value_t find_minimal_value(...) {
    ...
    if(...) return numeric_limits<value_t>::max;
    ...
}

编译器拒绝编译它,说:从'int(*)()noexcept(true)'到'value_t {aka int}'的转换无效。

这是什么意思?查看numeric_limits类,min()函数应返回通过模板类型名传递给它的类型的变量,因此在这种情况下为value_t。那么代码为什么不编译?

1 个答案:

答案 0 :(得分:4)

std::numeric_limits::max()是一个函数,因此您需要返回其调用的结果。这是使用调用运算符完成的:

value_t find_minimal_value() {
    if (...) return numeric_limits<value_t>::max();
    //                                          ^^
}

错误消息表示它无法转换函数指针(即int (*)()unsigned int