Yebangyu's Blog

Fond of Concurrency Programming and Machine Learning

C++中逗号表达式的一个应用

假设我们的程序需要调用三个函数fgh。其中fh可能失败,可能成功,而g一定成功。fh有返回值,g没有返回值。我们可能得写这样的代码:

if (f()!=SUCCESS) {
  //abort
} else {
  g();
  if (h()!=SUCCESS) {
  }
}

由于g没有返回值,因此这么写似乎是天经地义的。能不能优雅点?

借助于逗号表达式,我们可以这样:

if (f()!=SUCCESS){
} else if (g(),false) { //逗号表达式
  //we will never be here...
} else if (h()!=SUCCESS) {
}

形式上更加优美,但是和之前的写法相比可读性较差,并且使用了三次比较,之前只需要两次比较。

C++中,逗号表达式有时候是一种很有用的工具:(A,B,C),则从左到右求值,最后C的(返回)值作为整个表达式的值。