我发现了一些奇怪的C++语法
I found a strange bit of C++ syntax
while(variable & 0x08)
我在 do while 循环中发现了这一点,从技术上讲,有问题的变量是 16 位 int 数组中的第 4 个索引。while 循环本身不会修改该数组。
老实说,我不确定语法的作用。
这是按位和运算符。如果设置了两个操作数的相应位,则设置结果的每个位。因此,这会在设置第四位variable
时循环。
这是假设variable
是整数类型。如果是类类型,则运算符已重载并且可以执行任何操作。
这
实际上取决于variable
的类型。发生这种情况是因为operator&
可能会过载。例如,请考虑以下代码:
class some {};
bool operator&(const some&, int) {
return true;
}
如果声明变量some variable;
并执行以下操作:
while(variable & 0x08)
你会陷入无限循环。
如果 variable
是整型类型,则循环将继续执行其主体,直到第四位variable
未设置为 1
。这是因为0x08
的位表示形式是:1000
。因此,如果第四位variable
设置为 0
,则按位 AND 只能返回 0
的位表示形式。
这要么是对整数类型的按位运算,variable
,在这种情况下,循环将执行,直到variable
的第 4 位为 0,或者它是一个具有重载operator&
的类型,在这种情况下,它将运行直到 operator&(T&, int)
的结果(其中 T
是 variable
的类型)返回 0(或者更确切地说, 不等同于非零条件的东西)。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- 什么文件可以修改 atom 的C++语法?
- 创建模板嵌套类实例的语法?
- C++语法差异:二维和一维数组(指针算术)
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么