Недавно я столкнулся с каким-то очень странным синтаксисом:Colon после объявления участника класса?
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 просто совпадением, так как структура является 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. Что этот синтаксис достичь?
Это немного поле. – ikegami
'Test test();' объявляет функцию без аргументов и возвращает 'Test', а не переменную типа' Test'. – WorldSEnder
(который называется «самым неприятным анализом») – deviantfan