hdqqq

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  35 随笔 :: 0 文章 :: 104 评论 :: 0 Trackbacks

?:操作符是一个条件赋值的操作符号,常用来对变量进行条件赋值如:

int i = 1, j = 2;
int c_max = ( i > j ? i : j );

不过今天看了网上的一段代码,是这样用的

(i->second.left ? file.leechers : file.seeders)--;

上面的三个都是变量,也可以编译通过,所以写了段代码试了一下

 1 void show_1(int val)
 2 {
 3     cout << "function show_1 called!" << endl;
 4 }
 5 
 6 
 7 void show_2(int val)
 8 {
 9     cout << "function show_2 called!" << endl;
10 }
11 
12 
13 void quest_test()
14 {
15     int c = 0;
16     int a = 1, b = 2;
17     (c++ ? a : b)--;
18     cout << a  << " and "  << b << endl;
19     (c ? a : b)++;
20     cout << a  << " and "  << b << endl;
21     (c ? show_1 : show_2)(100);
22 }
23 
24 
25 最后的输出是
26 1 and 1
27 2 and 1
28 function show_1 called!


最怪的是?:操作符号,居然也可以用在函数上.

(c ? show_1 : show_2)(100);

其实等同于

if (c)
  show_1(100);
else
  show_2(100);

不过简练了很多.

posted on 2006-12-29 17:06 hdqqq 阅读(1267) 评论(3)  编辑 收藏 引用 所属分类: c/c++

评论

# re: ?:操作符的新用法 2006-12-29 23:16 pengkuny
哦  回复  更多评论
  

# re: ?:操作符的新用法 2006-12-31 13:06 kgha
以前还没发现这么好的用法,谢谢了  回复  更多评论
  

# re: ?:操作符的新用法 2009-04-10 14:30 Lingol
哈,没想过问号操作符的返回类型是右值还是左值。
这么一看,应该是左值才对。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理