Извиняюсь за глупый вопрос, но что делает эта единица в конце? Code: bool data7:1; Ведь таким же образом наследуют структуры и классы, а тут мистическая цифра "1" =/
это значит что ты эта переменная будит занимать 1 бит. И по этому конструкция в структуре типа bool data1:1; bool data2:1; bool data3:1; bool data4:1; bool data5:1; bool data6:1; bool data7:1; bool data8:1; тудет занимать 1 байт
ок, так: Code: struct _REC { unsigned data1:16; unsigned data2:16; unsigned data3:16; unsigned data4:1; unsigned data5:1; unsigned data6:1; unsigned data7:1; unsigned data8:1; } REC; //его почему-то short смущал
Code: void display(int in) { // What im doing here????????/ cout << ++in; } void foo() { int a=10; display(a); } Ничего не выведет, ??/ - триграф = \(конкатенация), в итоге получится функция void display(int in) {}
Code: class SimpleClass { private: int a; int b; public: SimpleClass(int x) : b(x), a(b) {} void print() { std::cout << "a=" << a << " b=" << b << std::endl; } }; int main() { SimpleClass a(42); a.print(); return 0; } Насколько помню тут первой инициализируется переменная a, так как стоит первая в объявлении в private и инициализируется соответственно мусором из b. Короче SimpleClass(int x) : b(x), a(b), порядок b(x), a(b) или a(b), b(x) не важен.
Немного поправлю: Списки инициализаторов инициализируют члены данных в порядке их следования в определении класса. Отсюда проблемы = ) Решения приняты )
разумеется, он убогий) как и вся идея сожрать 4 байта Кстати, мой VS сказал про него "8 байт". и про такое тоже: Code: struct _REC { unsigned short a,b,z; bool c:1,d:1,e:1,f:1,g:1; } REC;
Вижу что мало кто юзает данный способ по этому напишу правильный ответ сам ) Это директивы компилятора, которые на время могут менять выравнение структур. Подефолту выравнение идет на 4 байта. т.е. если структура будет 9 байт, то выравнеется на 12. #pragma pack(1) - выравнение 1 байт #pragma pack() - дефолтовое выранение. вот и выходит код типа #pragma pack(1) struct ..... #pragma pack()
Кстати, одним из решений другого задания (5) тоже были директивы и никто не написал Забыли их, бедняжек ( Added: перечитал пару статей: действительно, скорость при использовании прагм компилятора падает. Иногда значительно.
А вешь очень удобная для оптимизации работы программы. А если писать свой клиент-сервер которые общаются по своему протоколу, то такое просто необходимо юзать для снижения трафа
Вообще это можно использовать не только в сетевых приложениях, а везде ) Лишних пару сэкономленных байт еще никому не мешали. Added: перечитал пару статей: действительно, скорость при использовании прагм компилятора падает. Иногда значительно.
Кстати не всегда это делать желательно, потому как бываются случае что адрес переменной должен быть выравнен на 4 байта иначе будет ошибка. Такое встречается в некоторых WinAPI функцих которые просто убивают приложение если адрес буфера не выравненн на 4 байта
Добавил несколько несложных задачек. Не решены задания 2, 9, 10, 11, 12, 13, 14. С радостью выслушаю любые ваши предложения и замечания )