-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