在c++中用布尔AND和OR代替
in-place bool AND and OR in c++?
在c++中,是否有类似于布尔的就地AND和OR运算符?
bool someOk=false;
for(int i=0; i<10; i++){
someOk||=funcReturningBoolOnSuccess(i);
}
(我知道我会写someOk=someOk||funcReturningBoolOnSuccess(i)
,但它没有那么漂亮)。
答案很简短:不,C++语法不允许这样的结构。
你必须使用:
something = something || something_else;
然而。。。。如果函数在成功时返回bool(如中所示,在成功时为true)。。。你为什么不使用以下内容呢?
someOk = funcReturningBoolOnSuccess(i);
失败后不会返回false吗?似乎不合逻辑
你为什么不直接做:
bool someOk=false;
for(int i=0; i<10; i++){
if (funcReturningBoolOnSuccess(i)) {
someOk = true;
break;
}
}
效率高得多:)
只要返回为bool
,就可以使用|=
(除非您严格希望避免在第一次成功后调用funcReturningBoolOnSuccess(i);
——在这种情况下,您必须使用一些if
和break
,或者更改for
循环的条件)。
如果结果不是bool
值,那么您可能需要将其转换为该值,因为|=
实际上是一个逐位操作。C或C++中的任何基本类型都可以通过!!
的简单技巧("bang-bang"或"not not")转换为bool
——它使任何非零的true
和零结果的false
,这正是我们想要的。
我知道它还没有到位,但它更容易使用。
void OR(bool& x,bool y)
{
x = x || y;
}
/* later on */
bool someOk = false;
// someOk = false
// funcRetBoolOnSuc(8) = false
OR(someOk,funcRetBoolOnSuc(8));
// someOk = false
// someOk = false
// funcRetBoolOnSuc(8) = true
OR(someOk,funcRetBoolOnSuc(9));
// someOk = true
或者,因为bool只接受0,1作为值,所以可以这样做:
someOk |= funcRetBoolOnSuc(x);
相关文章:
- 我应该使用什么来代替void作为变体中的替代类型之一
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 模式"allocate memory or use existing data"
- N-API include an .so or dll
- 用' . '代替' :: '会在C++中造成歧义吗?
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 将 OR 逻辑运算符从 C++ 转换为 Fortran
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- 我如何将 OR 与 if 语句一起使用字符串
- 将 if 语句中的字符与 or 进行比较
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- "No such file or directory" C++标头问题
- 处理 std::enable_if<...中谓词的逻辑"OR">
- 使用什么代替"静态常量 TCHAR *"
- C++ 虽然语句不适用于字符串和"or"
- 在c++中用布尔AND和OR代替