如何理解定义文件夹中的函数代码?

How to understand function code in definition folder?

算法文件中有简单的max()功能代码。也许它是 C++ 代码,但我在这里一无所知。有很多宏。你能解释一下如何理解这种类型的代码吗?为什么使用了很多 #define

        // TEMPLATE FUNCTION max
template<class _Ty> inline

    _Post_equal_to_(_Left < _Right ? _Right : _Left)

    constexpr const _Ty& (max)(const _Ty& _Left, const _Ty& _Right)
        _NOEXCEPT_OP(_NOEXCEPT_OP(_DEBUG_LT(_Left, _Right)))
    {   // return larger of _Left and _Right
    return (_DEBUG_LT(_Left, _Right) ? _Right : _Left);
    }

template<class _Ty> inline
    /* constexpr */ // TRANSITION
    _Ty (max)(_XSTD initializer_list<_Ty> _Ilist)
    {   // return leftmost/largest
    return ((_STD max)(_Ilist, less<>()));
    }

"HOW to understand" 复杂的代码,就是简单地浏览它,一次一个单词(或一行),并准确理解它的意思。通常,刚开始时执行此操作的最佳方法是找到任何 #defines 并将它们复制粘贴到位。

以第一个例子为例(注意这是如何计算出来的,而不是它做了什么)

template<class _Ty> inline                       

好的,所以我们正在查看内联模板...我可以在 cppreference 上查看它们的含义

_Post_equal_to_(_Left < _Right ? _Right : _Left)

看起来像一个宏(因为它在任何 {} 之外)...最好找到那个定义是什么,然后 post 它就位。如果它调用其他宏(确实如此),那么我将不得不重复直到我完全理解它在做什么。

constexpr const _Ty& (max)(const _Ty& _Left, const _Ty& _Right)

constexpr & const ... 那些我也可以在 cpprence 上查找。 _Ty& 好吧,我从 cppreference 的模板阅读中知道这是 returning 模板所基于的类型;我们得到一个 return 值和一个左&右值。

也许我之前没有见过用于声明函数的语法 (max)...而且我找不到任何关于正在发生的事情的文档;而且我无法理解/找到 C++ 标准。我会在 Stack Overflow 上询问它是否是有效的语法,以及是否有任何理由选择它而不是 max() 因为这是一个我可以 post 研究结果的特定问题;但我知道它在我的编译器中被接受,因为我已经尝试过了。

    _NOEXCEPT_OP(_NOEXCEPT_OP(_DEBUG_LT(_Left, _Right)))

更多宏 - 好吧,最好找到并粘贴它们;它实际上与另一个问题有关 Use of the noexcept specifier in function declaration and definition? 所以我将阅读它以快进并节省我的时间。

{   // return larger of _Left and _Right
return (_DEBUG_LT(_Left, _Right) ? _Right : _Left);
}

好吧,只有一个宏可以使用(因为它都是大写字母)但是我们之前已经看过这个..有用的评论说明了它的作用。

要回答后者 - 为什么这么多 #define - 这很简单。他们想。他们不需要,有些人会不赞成继续使用它们。我认为不值得进一步扩展这一点,因为它不会帮助任何人。