2

我有一个使用定义的类型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在这种情况下。那么为什么代码不能编译呢?

4

1 回答 1

8

std::numeric_limits::max()是一个函数,所以你需要返回它的调用结果。这是使用呼叫运算符完成的:

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

错误消息意味着它无法转换函数指针(即转换int (*)()unsigned int.

于 2014-08-26T22:35:36.937 回答