【问题标题】:numeric_limits::max and "invalid conversion from 'int (*)()noexcept (true)' to 'value_t {aka int}'"numeric_limits::max 和“从 'int (*)()noexcept (true)' 到 'value_t {aka int}' 的无效转换”
【发布时间】:2014-08-26 22:33:03
【问题描述】:

我有一个使用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。那么为什么代码不能编译呢?

【问题讨论】:

  • std::numeric_limits&lt;T&gt;::max() 是一个函数。
  • @Nemo 这太荒谬了,谢谢。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 2014-10-23
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2020-01-15
    相关资源
    最近更新 更多