我最近遇到一些很奇怪的语法:
struct Test {
size_t a : 2;
size_t b : 3;
size_t c : 4;
};
Run Code Online (Sandbox Code Playgroud)
奇怪的是,它使用 GCC 4.9.2 进行编译,并且所有警告标志都打开。
void test_test() {
Test test;
std::cout << test.a << " " << test.b << " " << test.c << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
虽然声明 test 没有给出错误和输出0 0 0(我相信 0 只是巧合;由于该结构是普通旧数据,所以它的所有成员都没有默认初始化为 0),将声明更改为定义 via 会Test test();给出错误
tester.cpp:14:20: error: request for member 'a' in 'test', which is of non-class
type 'Test()'
Run Code Online (Sandbox Code Playgroud)
启用 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
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2378 次 |
| 最近记录: |