类成员声明后冒号?

柠檬皮

我最近遇到了一些非常奇怪的语法:

struct Test {
    size_t a : 2;
    size_t b : 3;
    size_t c : 4;
};

奇怪的是,这是在GCC 4.9.2编译并打开所有警告标志的情况下进行的。

void test_test() {
    Test test;
    std::cout << test.a << " " << test.b << " " << test.c << std::endl;
} 

虽然声明test不会给出任何错误和输出0 0 0(我相信0只是巧合;由于struct是Plain Old Data,所以没有将其成员默认初始化为0),但通过将该声明更改为定义Test test();会产生错误

tester.cpp:14:20: error: request for member 'a' in 'test', which is of non-class
 type 'Test()'

启用C ++ 11会删除错误消息,但是值仍然神秘地保持为0。此语法实现了什么?

世界末日

此语法是位字段。

struct Test {
    size_t a : 2; // Occupies two bits
    size_t b : 3; // Occupies three bits
    size_t c : 4; // Occupies four bits
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

声明后使用方法扩展类功能

来自分类Dev

类声明后编译错误,Main不“看到”该类

来自分类Dev

声明后修改IEnumerator

来自分类Dev

声明后的装饰方法

来自分类Dev

变量声明后的括号

来自分类Dev

变量声明后的括号

来自分类Dev

声明后将新成员添加到内联对象时,TypeScript编译器烦人

来自分类Dev

C ++在类外部声明类成员

来自分类Dev

在类成员函数中声明类成员变量

来自分类Dev

为什么我的类构造变量在声明后保持未定义?

来自分类Dev

类定义中的方法声明之前的双冒号(::)

来自分类Dev

JS:变量声明后的分号

来自分类Dev

声明后调用构造函数

来自分类Dev

类成员声明的快捷方式

来自分类Dev

将指针声明为类成员C ++

来自分类Dev

Coffeescript:声明类的成员变量很危险吗?

来自分类Dev

C ++:将模板声明为类成员

来自分类Dev

C ++,类:成员错误的离线声明?

来自分类Dev

使用声明不能引用类成员

来自分类Dev

类成员声明的快捷方式

来自分类Dev

C ++:将模板声明为类成员

来自分类Dev

Coffeescript:声明类的成员变量很危险吗?

来自分类Dev

模板化类成员VS嵌套类正向声明

来自分类Dev

类成员函数声明前的类关键字

来自分类Dev

模板化类成员VS嵌套类正向声明

来自分类Dev

变量声明中的冒号

来自分类Dev

变量声明中的冒号

来自分类Dev

声明后如何使用环境变量

来自分类Dev

斯威夫特语言:守卫声明后如何继续?