我有一个 if 语句 [显然] 仅在条件为真时运行。在这个 if 语句之后,有一些代码应该始终运行,然后是另一个 if 语句,应该在与第一个相同的条件下运行。
中间的代码是使用堆栈的特定元素执行操作,两边的 ifs 分别在操作之前和之后对堆栈执行 push/pop。
所以逻辑是这样的:
- 我需要推送堆栈吗?是/否
- 在栈顶执行操作
- 堆栈是否被推送?(如果是,则弹出)
第 1 项和第 3 项条件相同。
这是我第一次在 C++ 中编写的代码
#include <stdio.h>
#include <stdlib.h>
int somefunction(){
return rand() % 3 + 1; //return a random number from 1 to 3
}
int ret = 0;
//:::::::::::::::::::::::::::::::::::::::
// Option 1 Start
//:::::::::::::::::::::::::::::::::::::::
int main(){
bool run = (ret = somefunction()) == 1; //if the return of the function is 1
run = (run || (ret == 2)); //or the return of the function is 2
if (run){ //execute this if block
//conditional code
if (ret == 1){
//more conditional code
}
}
//unconditional code
if (run){
//even more conditional code
}
}
//:::::::::::::::::::::::::::::::::::::::
// Option 1 End
//:::::::::::::::::::::::::::::::::::::::
在写完这篇文章后,我认为这样做可能更有效:
//:::::::::::::::::::::::::::::::::::::::
// Option 2 Start
//:::::::::::::::::::::::::::::::::::::::
int main(){
bool run;
if (run=(((ret = somefunction()) == 1)||ret == 2)){ //if the return of the function is 1 or 2 then execute this if block
//conditional code
if (ret == 1){
//more conditional code
}
}
//unconditional code
if (run){
//even more conditional code
}
}
//:::::::::::::::::::::::::::::::::::::::
// Option 2 End
//:::::::::::::::::::::::::::::::::::::::
我更喜欢第一种方法的可读性,因为它分为几行,而第二种方法在同一行中有两个赋值(=)和两个比较(==)。我想知道使用第二种方法是否更好(出于效率或可执行文件大小的原因),或者是否有比这两种方法更好的方法。
在任何人说它只会产生几乎无法估量的差异之前,这是一个巨大的循环,必须在 1/50 秒内运行数千次,所以我想尽可能多地节省时间。