【发布时间】:2015-12-02 16:38:55
【问题描述】:
假设我在|| 运算符的左/右有两个表达式。我发现如果左表达式为真,则永远不会调用右运算符。例如,在我下面的代码中,当getRand 返回true 时,我发现Foo 永远不会被调用。我在 Mac OSX 上的 XCode 上进行了测试,想知道它是否是我们可以依赖的 C++ 的可靠特性——如果留下 || 的一部分是真的,永远不会调用正确的部分,或者它只是针对特定平台的特殊功能(例如带有 XCode 的 OSX)?在下面发布我的代码,谢谢。
bool Foo()
{
std::cout << "I am called!\n";
return false;
}
bool getRand()
{
int random_variable = std::rand();
std::cout << random_variable << '\n';
return random_variable % 2 == 1;
}
int main(int argc, const char * argv[]) {
if (getRand() || Foo())
{
std::cout<<"Hello World \n";
}
return 0;
}
提前致谢, 林
【问题讨论】:
-
wondering if it is a reliable feature of C++ we could rely on是的。 -
&& 也有短路评估,如果第一个参数为假
-
短路评估是一个可靠的功能大部分时间。如果使用的类型具有重载的 && 运算符,它将不起作用。像
bool这样的原始类型是安全的。
标签: c++