2017-06-13 19 views
0

我最近开始使用标志来处理输入循环的有效性条件,因此可以在循环内的其他地方检查它,而不必重复多次执行相同的检查。但是,我不确定如何最好地分配国旗。对此有没有普遍的标准做法,或只是个人风格?如果有的话,编译后的代码有什么区别?if-check和inline条件之间是否存在编译器差异?

例如,而不是下面的代码:

bool isValidSize; 

do { 
    std::cout << "Enter the font size (8-12): "; 
    std::cin >> fontSize; 

    if (fontSize >= MIN_FONT_SIZE && fontSize <= MAX_FONT_SIZE) { 
     isValidSize = true; 
    } else { 
     isValidSize = false; 
     std::cout << "Invalid size. "; 
    } 
} while (!isValidSize); 

if语句可以改变,使其更加清楚isValidSize是一目了然设置为:

isValidSize = (fontSize >= MIN_FONT_SIZE && fontSize <= MAX_FONT_SIZE); 
    if (!isValidSize) { 
     std::cout << "Invalid size. "; 
    } 

会变成这样被编译为一个额外的if-check?将任务与其他任务分开是否有任何可移植性好处?从查看代码看来,第一种方式的好处似乎只有一个分支,但是每个代表需要额外的分配,并且还有其他方法?

+1

您可以通过https://godbolt.org/轻松查看不同的编译器使用不同的优化选项生成的内容。但是,在任何情况下,在尝试优化之前,您应该对代码进行基准测试,以确定它是否重要 - 如果不是,请始终编写最清晰的版本。 –

+1

这种微观优化几乎总是愚蠢的。把它写成对读者最有意义的方式。让编译器完成它的工作。 Gcc非常擅长优化这种情况。如果你很好奇,学习如何编译汇编(简单)并查看自己会发生什么(有点困难),这是一项有价值的技能。然后意识到没有两个编译器是相同的,包括相同编译器的版本。 @JesperJuhl对godbolt.org是正确的。这很酷。 – Gene

+0

在交互式输入循环中担心纳秒时间毫无意义。使用你发现最具可读性的那个。 – molbdnilo

回答

1

没有区别:proof

GCC 6.3上进行了测试并进行了优化(-O3)。

去你认为更可读的一个。

+0

谢谢!就一般实践可读性而言,它们中的一个更为标准,还是真的不重要? – BrainFRZ

+0

@BrainFRZ在这种情况下,它确实取决于。无论如何,恕我直言,我更喜欢第二个片段。我觉得它更可读。 –

相关问题