我今天遇到了这个奇怪的错误,我正在使用 std::min 来获取变量值和枚举常量中的最小值,到目前为止,还不错,但是当我去编译它时,g++ 给了我一个编译错误表明它找不到与 min 函数匹配的模板:
no matching function for call to ‘min(int&, main()::<anonymous enum>)’
这是一个重现错误的最小示例:
#include <algorithm>
int main()
{
int actualRange=10;
enum { DesiredRange=8 };
int workingRange = std::min(actualRange, DesiredRange);
return 0;
}
修复很简单,我简单地使用 int(DesiredRange)
作为 min 函数的第二个参数,但令我惊讶的是,鉴于枚举类型只是一个整数,这完全是必要的持续的。我的系统信息如下:“g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3”
我的代码中有什么不正确的地方导致了这个错误吗?这是一个有效的编译错误吗?
您的代码没问题。模板参数推导不进行转换(派生到基数除外),因此您使用简单定义的函数(例如std::min
)会遇到此问题。 andrei alexandrescu 曾经写过a long treatise关于在 C++03 中需要什么才能使基于模板的 min
函数像宏一样宽松。
我是一名优秀的程序员,十分优秀!