如何理解定义文件夹中的功能代码?

时间:2018-02-09 13:41:46

标签: c++ preprocessor

算法文件中有简单的sum = self.scaled_value() + self.value 功能代码。也许它是c ++代码但我在这里什么都不懂。有很多宏。你能解释一下如何理解这种类型的代码吗?为什么有很多max()使用?

#define

1 个答案:

答案 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 - 这很简单。他们想要。他们不需要,有些人会对他们的继续使用感到沮丧。我不认为值得进一步扩展,因为它不会帮助任何人。