You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++如何用单行语句调用函数更新最大值且避免重复调用?

问题

需要多次调用一个返回整数的函数,每次检查返回值是否大于之前记录的最大值,想用单行语句避免代码重复。目前用临时变量存返回值再用三元运算符更新最大值,但代码冗余;直接在三元运算符里调用函数会导致函数被调用两次,不想这样,有没有办法实现不重复调用函数的单行语句?

现有代码

int callFunction() {
  int result = // do something;
  return result;
}

int main() {
  int result = 0;
  int tmpResult = 0;

  // call 1
  int tmpResult = callFunction();
  result = (tmpResult > result) ? tmpResult : result;
  
  // call 2
  int tmpResult = callFunction();
  result = (tmpResult > result) ? tmpResult : result;
  
  // call 3
  int tmpResult = callFunction();
  result = (tmpResult > result) ? tmpResult : result;

  // log the highest result
}

尝试的代码(存在重复调用问题)

result = (callFunction() > result) ? callFunction() : result;

解决方案

针对C语言场景,有几种实用的单行写法可以避免函数重复调用:

  • 逗号表达式写法
    利用逗号表达式从左到右执行的特性,先把函数返回值存入临时变量,再进行判断:
result = (tmpResult = callFunction(), tmpResult > result) ? tmpResult : result;

这里tmpResult = callFunction()会先执行,将函数返回值暂存,之后的判断和赋值都用这个临时变量,函数只会被调用一次,同时实现了单行更新最大值的需求。

  • 封装成宏(适合多次复用)
    如果需要频繁执行这个逻辑,可以把临时变量的操作封装成宏,调用时就是单行:
#define UPDATE_MAX(max_val, func) do { int tmp = func; if (tmp > max_val) max_val = tmp; } while(0)

使用时直接写:

UPDATE_MAX(result, callFunction());

这种写法把冗余逻辑藏在宏里,既保证调用简洁,又完全避免函数重复执行。

如果是C环境(C17及以上),还可以用lambda表达式配合std::max实现:

result = std::max(result, [tmp = callFunction()](){ return tmp; }());

内容的提问来源于stack exchange,提问作者Jelle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:30:22