1

我是一名学生,我的老师给了我并且已经解决了学习的练习,在他的练习中我看到了这一行:

 #define MIN(a,b) ((a) < (b) ? (a) : (b))

我以前从未使用过#define。

我不明白什么:

((a) < (b) ? (a) : (b))

代表。

看起来像'?是一个比较不确定。任何人都可以帮助我吗?

4

2 回答 2

7

它被称为条件运算符(或三元运算符)

#define MIN(a,b) ((a) < (b) ? (a) : (b))

方法:

if ((a) < (b)){   
  return a;  
} else {   
  return b; 
}

所以,如果你这样做:

int test = MIN(5,10);

测试将是 5

链接到 wiki 页面的问题:http: //goo.gl/bw2sL

于 2013-02-25T08:40:39.533 回答
3

#define定义了一个新的预处理器宏,在这种情况下,将 MIN 代码放置在您放置它的位置;和“变量”被替换ab您提供给宏作为输入的任何内容。

 #define MIN(a,b) ((a) < (b) ? (a) : (b))

 MIN(5,6);
 //gets expanded to
 ((5) < (6) ? (5) : (6))

实际的表达式使用三元运算符,根据表达式的评估返回 A 或 B,您可以在此处阅读有关它的更多信息:

http://en.cppreference.com/w/cpp/language/operator_other

最后,当您用 c++ 标记问题时,请考虑非宏 max 和 min 函数。

#include <algorithm>
...
int i=std::min(5,6);
于 2013-02-25T08:40:51.597 回答