-3
我最近遇到了一些很奇怪的语法:课堂成员声明后冒号?
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;
}
虽然宣布测试不提供任何错误和输出0 0 0
(我相信0仅仅是巧合,因为结构是普通老式的数据,没有它的成员是默认初始化为0),改变 声明的定义通过Test test();
给出了错误
tester.cpp:14:20: error: request for member 'a' in 'test', which is of non-class
type 'Test()'
启用C++ 11删除错误信息,但数值仍然令人费解0 是什么语法实现?
这是一个位域。 – ikegami
'Test test();'声明一个不带参数的函数并返回'Test',而不是'Test'类型的变量。 – WorldSEnder
(这被称为“最令人头痛的解析”) – deviantfan