我刚刚研究了 Microsoft 的 limits.h
。我试图检查 max()
函数的返回类型是什么,令我惊讶的是我看到了这样的东西:
// TEMPLATE CLASS numeric_limits
template<class _Ty>
class numeric_limits
: public _Num_base
{ // numeric limits for arbitrary type _Ty (say little or nothing)
public:
static _Ty (__CRTDECL min)() _THROW0()
{ // return minimum value
return (_Ty(0));
}
static _Ty (__CRTDECL max)() _THROW0()
{ // return maximum value
return (_Ty(0));//EXACTLY THE SAME WHAT IN min<<------------------
}
//... other stuff
};
min
和 max
返回完全相同怎么可能?这是否意味着如果我写 makeSanwich() return (_Ty(0)) 它会为我做一个三明治?同样的代码,只是函数名称不同,我们怎么可能得到不同的结果?
最佳答案
那不是相关代码。
numeric_limits<T>
专门用于 native 整数类型,在这些专门化中实现了相关的值/逻辑。看那里。
上面的代码是所有非专用类型的通用代码,它们确实会为 min()
返回相同的值。和 max()
.自己试试:
struct foo {
int x;
foo(int x) : x(x) {}
};
bool operator ==(foo const& a, foo const& b) { return a.x == b.x; }
assert(std::numeric_limits<foo>::min() == std::numeric_limits<foo>::max());
...不过,我不确定这种行为是否是标准强制要求的。自 numeric_limits
以来,上述代码同样会引发编译时错误。尚未专门用于 foo
.
关于c++ - 正确的名字足以让它发生吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2820608/