c++ - 正确的名字足以让它发生吗?

标签 c++ templates metaprogramming

我刚刚研究了 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
};

minmax 返回完全相同怎么可能?这是否意味着如果我写 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/

相关文章:

c++ - 将int添加到字符串c++

c# - 冒泡排序算法的空间复杂度

c++ - 在具有模板和继承的 C++ 中使用未声明的标识符

c++ - C++11 中的别名结构

c++ - 这个 C++ 模板声明真的不正确还是我的编译器搞砸了?

c++ - openMP 的目标和目标数据之间的区别?

php - _自动加载问题

haskell - 如何在类实例声明中拼接类型上下文?

ruby 理解枚举方法

ruby-on-rails - ruby respond_to_missing?叫 super 还是不叫?