oic*_*sah 3 c++ function sequence
result= function_1()*function_2();
Run Code Online (Sandbox Code Playgroud)
我正在写一个像上面这样的代码.我想知道的是在进行乘法时,首先调用哪个函数?这是因为,第一个被调用的函数可以影响从另一个函数返回的结果.我假设function_1()首先被召唤,当我尝试时,我看到它真的如此.但是,总是如此吗?是否取决于我使用的编译器或我使用的系统?
C++(或C)标准未指定评估顺序(参见Vlad的回答).如果您有function_1或function_2有明显的副作用,它可能会成为您应该绝对避免的一些未指明的行为(就像您应该避免未定义的行为).在某些情况下(具有强大优化功能的内联函数),计算可能会混杂在一起.
想想像奇怪的情况
static int i;
int function_1(void) { i++; return i; }
int function_2(void) { i+=2; return 3*i+1; }
Run Code Online (Sandbox Code Playgroud)
它可能是特定于实现的,可能取决于实际的编译器和优化标志.
您应该编写代码,好像函数调用的顺序是完全随机的并且不可重现(即使在实践中它可能是可重现的).同样,您不应该期望任何特定的参数评估顺序(例如,f(i++, ++j)您不知道是否已经i或者j已经增加),即使对于给定的编译器,该订单可能是固定的.同样,您应该想象一个完全随机且不可重现的顺序.
正如David Schwartz评论的那样,如果您关心订单,则应该明确编写一些序列点
最后,如果您的代码依赖于某些顺序,则它完全不可读,并且出于简单的可读性原因,您应该避免以这种方式编码.
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |