Chinaunix首页 | 论坛 | 博客
  • 博客访问: 831088
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-15 11:04:14

C/C++语言中 if( a>'9' ) a+=7 等同于 a>'9'?(a+=7):0 等同于 a>'9'&&(a+=7) 等同于 a<='9'||(a+=7);

if( a>'9' ) a+=7 清晰易懂,所以能用 if 的情况下就不要使用其他取巧的方法,但也应该知道if只能作为语句,而不能作为表达式,比如一个遍历ODBC记录集的代码,使用 if 语句只能如下:

CRecordset rs;
...
if( !rs.IsBOF() )
{
    for( rs.MoveFirst(); !rs.IsEOF(); rs.MoveNext() )
    {
        ......
    }
}

而使用 || 可以如下:

for( rs.IsBOF() || rs.MoveFirst(); !rs.IsEOF(); rs.MoveNext() )
{
    ......
}
阅读(4274) | 评论(28) | 转发(0) |
给主人留下些什么吧!~~

网友评论2012-11-15 11:13:17

颜学铭
楼主确实善于思考问题,值得学习。
虽然有很多书籍不赞成写过于复杂的表达式,认为这是奇巧淫技。特别是在具有side-effect(表达式附加效果)影响的情况下有时甚至给理解造成一定困难。但往往很多公司在招聘面试试题当中却喜欢考核程序员对这类问题的掌握情况。因此多思、多想、多用未必是坏事。对于奇巧淫技的掌握有时往往能够开启你对程序真谛的思考之门。boss们通常喜欢你写规范程序的程序,那是因为这样不容易出错。这样的程序员是boss们眼中的好同志也是很多职业教育培养的目标,但对你的成长未必就是好事。
另外,在公司团队中未必需要写出任何人都看得懂,任何人都可以修改的程序。术业有专攻,技术有高下,你是否看得懂STL,boost的源代码,难道说公司有人看不懂模板,你就不用模板,即使你觉得模板很有用。

网友评论2012-11-15 11:13:02

wm
if( !rs.IsBOF() )
{
    for( rs.MoveFirst(); !rs.IsEOF(); rs.MoveNext() )
    {
        ......
    }
}

要想等同于:

for( rs.IsBOF() || rs.MoveFirst(); !rs.IsEOF(); rs.MoveNext() )
{
    ......
}
重要前提是,一个dataset 在OPEN之后,如果 “rs.IsBof()” 为真,那么此时(仅当此时) "rs.IsEof()"
肯定也为真。。。。仅单纯从表达式上来推,前面几位C++学得不错的人

网友评论2012-11-15 11:12:43

tianyu
所以我的感想是...
除非確實需要一個真假值能判別程式狀態, 否則便使用純粹的if述句, 因為前者還會除了執行if述句程序還依其內算式結果評估真假值, 如非需要反而導致程式員陷入分析程式狀態與真假值關係的包伏裡

ps: 對不起各位, 我總是想到就打, 所以發了很多篇, 以後會改進=.=

网友评论2012-11-15 11:12:22

tianyu
上面好像說錯了一點, 就是"A implies B"並不等於程式語言的"if A then B", 因為後者除了界定"A implies B"還界定了"not A implies not B"(A若不發生則B也不發生)

所以上面幾句之所以相等, 是因為&&與||運算子評估時內含此if A then B判斷

至於expression出來的真假值我想是另外一回事了, 它提供if述句的額外能力

网友评论2012-11-15 11:12:07

tianyu
if( a>'9' ) a+=7 等同于 a>'9'?(a+=7):0 等同于 a>'9'&&(a+=7) 等同于 a<='9'||(a+=7);
-----------------------------------------------------
我覺的等同於 a>'9'?(a+=7):0 與 a<='9'||(a+=7);是比較好瞭解的
因為一個是使用易懂的條件運算子, 一個好似由mathematic中的logic, 引申出來的"A implies B" is logically equivalent to "not A or B", 都很直觀

而if( a>'9' ) a+=7 等同于a>'9'&&(a+=7)用了&&評估順序的方式, 初看還真不容易明白, 不過瞭解以後就發覺原來邏輯對等有時可能還須深入考慮評估順序呢, 謝謝版主讓我