use*_*155 0 c++ optimization logical-operators visual-studio-2012
考虑
bool Fun1()
{
...
}
bool Fun2()
{
}
Run Code Online (Sandbox Code Playgroud)
在我可以拥有的主要代码中的某个地方
if(Fun1() && Fun2()) //option-1
{
}
Run Code Online (Sandbox Code Playgroud)
要么
if(Fun1() & Fun2()) //option-2
{
}
Run Code Online (Sandbox Code Playgroud)
在VS2012中似乎option-1没有确保在发生这两种功能时始终执行这两项功能option-2.具体来说,如果其中一个函数返回,false则不执行其他函数option-1.但是,整体代码要求对它们的正确行为进行评估,这是我能够实现的option-2.我想知道这种行为是否option-2可以从编译器改为编译器(也有优化级别)或由标准确保?
标准明确表示对于像bool运算符这样的内置类型&&并且||是短路的 - 即,第一个参数首先被计算,而第二个参数仅在第一个参数没有给出语句的确定答案时进行评估 - 即它是falsefor ||或truefor &&.
按位&按照正常的函数调用规则,因此,两个参数都以未指定的顺序进行计算.