关于C++代码中SUMAS函数是否重复调用的技术问询
关于C++代码中SUMAS函数调用的问题解答
在你提供的这段C++代码里,每次书写SUMAS(...)函数调用表达式时,都会触发一次完整的函数执行,编译器不会自动存储第一次调用的返回值来复用。
具体分析
这段代码里的SUMAS函数被重复调用了多次:
SUMAS(MADERAS, N, M, L, K)总共被调用4次(外层条件判断2次、内部if判断1次、输出1次)SUMAS(MADERAS, M, N, L, K)总共被调用3次(外层条件判断1次、内部if判断1次、输出1次)
除非SUMAS是完全无副作用的纯函数(仅依赖输入参数、不修改外部状态、相同输入返回固定结果),且编译器开启了极高等级的优化(比如-O3),才可能被优化为只调用一次,但这种优化属于编译器的可选行为,绝对不能依赖——如果函数有任何副作用(比如修改全局变量、读取外部文件、依赖随机值等),重复调用会导致结果不一致,甚至逻辑错误。
优化方案
正确的做法是提前将函数返回值存储到变量中,避免重复调用:
// 先调用两次函数,把结果存到变量里 int resultNM = SUMAS(MADERAS, N, M, L, K); int resultMN = SUMAS(MADERAS, M, N, L, K); if (resultNM <= resultMN && resultNM != -1) { if (resultNM == -1) cout << "impossivel" << endl; else cout << resultNM << endl; } else { if (resultMN == -1) cout << "impossivel" << endl; else cout << resultMN << endl; }
这样不仅只需要调用两次函数,提升了代码效率,还能避免因函数副作用导致的逻辑问题,代码可读性也更强。
内容的提问来源于stack exchange,提问作者Francisco Carthery
相关产品推荐
相关产品推荐

