冒号:用于变量初始化?

Cod*_*ith 5 c++

我在这里找到了这一行:

uint32 bIsHungry : 1;
Run Code Online (Sandbox Code Playgroud)

...我从未见过用于初始化变量的语法.

我习惯看到这个:

uint32 bIsHungry = 1;
Run Code Online (Sandbox Code Playgroud)

它看起来有点像初始化列表,但对于单个字段?

它是什么,它做了什么,我为什么要关心?

Mar*_* A. 9

该行是一个位字段声明,它声明一个具有显式位级大小的数据成员

来自cppreference的示例:

#include <iostream>
struct S {
 // three-bit unsigned field,
 // allowed values are 0...7
 unsigned int b : 3;
};
int main()
{
    S s = {7};
    ++s.b; // unsigned overflow
    std::cout << s.b << '\n'; // output: 0
}
Run Code Online (Sandbox Code Playgroud)

请注意,在上面的示例中,无符号溢出是已定义的行为(如果b声明为有符号类型,则不适用)

您链接的文档也说明了这一点

布尔类型可以用C++ bool关键字表示,也可以用位域表示

关于我为什么要关心我建议阅读这个其他问题