Chinaunix首页 | 论坛 | 博客
  • 博客访问: 830082
  • 博文数量: 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() )
{
    ......
}
阅读(4241) | 评论(28) | 转发(0) |
给主人留下些什么吧!~~

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

京山游侠
我喜欢用while循环
while( !rs.IsEOF() ) {
  ...
   rs.MoveNext();
}

正如星哥所说"除非恶意搞鬼,否则如果 rs.IsBOF() 为 true,则 rs.IsEOF 也一定为 true",所以我连IsBOF()都不去检测,呵呵,省略了.

网友评论2012-11-15 11:06:53

UsingSystem
Q:
如果打开数据库没有记录,IsBOF is TRUE, 是不是执行 MoveNext()啊?  

A: rs.MoveFirst

网友评论2012-11-15 11:06:42

周星星
对于 rs.IsBOF() || rs.MoveFirst()
如果 rs.IsBOF() is true,那么 rs.MoveFirst() 将不会执行,因为无论 rs.MoveFirst() is true or false,整个表达式的结果都是true,没有必要再去执行,这种表达式的猝死式是C/C++标准规定的。

网友评论2012-11-15 11:06:14

UsingSystem
如果打开数据库没有记录,IsBOF is TRUE, 是不是执行MoveNext()啊?

网友评论2012-11-15 11:05:59

周星星
对于 && 和 || 在 C/C++ 中使用的是猝死式,比如
rs.IsBOF() || rs.MoveFirst()
如果数据库没有记录,IsBOF() is TRUE,那么无论rs.MoveFirst()是ture还是false,这条判断语句的结果都是true,所以它就没必要再去判断rs.MoveFirst()是true还是false,所以在数据库没有记录的情况下也就不会执行rs.MoveFirst()。