算法文件中有简单的sum = self.scaled_value() + self.value
功能代码。也许它是c ++代码但我在这里什么都不懂。有很多宏。你能解释一下如何理解这种类型的代码吗?为什么有很多max()
使用?
#define
答案 0 :(得分:0)
“如何理解”复杂的代码,只是简单地遍历它,一次一个字(或一行),并准确理解它的含义。通常,在您开始时执行此操作的最佳方法是找到任何#defines
并将其复制粘贴到位。
采用第一个例子(注意这是如何解决它,而不是它的作用)
template<class _Ty> inline
好的,所以我们正在查看内联模板...我可以查看cppreference他们的意思
_Post_equal_to_(_Left < _Right ? _Right : _Left)
看起来像一个宏(因为它在任何{}之外)...最好找到那个定义,然后将它贴在它的位置。如果它调用其他宏(确实如此),那么我将不得不重复,直到我完全理解它正在做什么。
constexpr const _Ty& (max)(const _Ty& _Left, const _Ty& _Right)
constexpr&amp; const ...那些我也可以查看cpprefernce的人。 _Ty&安培;好吧,我从cppreference的模板读取中得知,这是返回模板所基于的类型;我们得到一个返回值和一个左右。
也许我之前没有看到语法(max)来声明一个函数......而且我找不到任何关于正在发生的事情的文档;我无法理解/找到c ++标准。我会问堆栈溢出是否是有效的语法,如果有任何理由在max()
选择它,因为这是一个特定的问题,我可以发布研究结果;但我知道它在MY编译器中被接受,因为我已经尝试过了。
_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 - 这很简单。他们想要。他们不需要,有些人会对他们的继续使用感到沮丧。我不认为值得进一步扩展,因为它不会帮助任何人。