冒号:用于变量初始化?

时间:2015-08-06 08:13:57

标签: c++

我找到了这一行here

uint32 bIsHungry : 1;

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

我习惯看到这个:

uint32 bIsHungry = 1;

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

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

3 个答案:

答案 0 :(得分:8)

该行是bit field declaration,它声明了一个具有显式位级大小的数据成员

来自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
}

请注意,在上面的示例中,无符号溢出为defined behavior(如果b被声明为签名类型,则不适用

您链接的文档也说明了

  

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

表示

关于我为什么要关心我建议阅读this other question

答案 1 :(得分:1)

这是位域声明,声明一个具有显式大小的类数据成员,以位为单位。

答案 2 :(得分:1)

它不是初始化,它是声明的片段。

struct {
    // ...
    uint32 bIsHungry : 1;
    // ...
};

bIsHungry声明为struct的位域成员。它说bIsHungryunsigned int,其长度为1位。其可能的值为01

了解有关位域的更多信息:http://en.cppreference.com/w/c/language/bit_field