Программирование. Принципы и практика использования C++ Исправленное издание, стр. 356
// инициализация Shape* p1 = new Rectangle(Point(0,0),10); better2(make_ref(s0)); // OK: преобразование // в Array_ref<Shape*const> better2(make_ref(s1)); // OK: преобразование // в Array_ref<Shape*const> better2(make_ref(s2)); // OK (преобразование не требуется) better2(make_ref(p1,1)); // ошибка better2(make_ref(q,max)); // ошибка}Попытки использовать указатели приводят к ошибкам, потому что они имеют тип
Shape*better2()Array_ref<Shape*>better2()better2()make_ref(&p1,1)
25.5. Биты, байты и слова
Выше мы уже упоминали о понятиях, связанных с устройством компьютерной памяти, таких как биты, байты и слова, но в принципе они не относятся к основным концепциям программирования. Вместо этого программисты думают об объектах конкретных типов, таких как
doublestringMatrixSimple_windowЕсли вы плохо помните двоичное и шестнадцатеричное представления целых чисел, то обратитесь к разделу A.2.1.1.
25.5.1. Операции с битами и байтами

Биты в байте нумеруются справа (от самого младшего бита) налево (к самому старшему). Теперь представим слово как последовательность, состоящую из четырех битов.

Нумерация битов в слове также ведется справа налево, т.е. от младшего бита к старшему. Этот рисунок слишком идеализирует реальное положение дел: существуют компьютеры, в которых байт состоит из девяти бит (правда, за последние десять лет мы не видели ни одного такого компьютера), а машины, в которых слово состоит из двух бит, совсем не редкость. Однако будем считать, что в вашем компьютере байт состоит из восьми бит, а слово — из четырех.
Для того чтобы ваша программа была переносимой, используйте заголовок <limits> (см. раздел 24.2.1), чтобы гарантировать правильность ваших предположений о размерах.
Как представить набор битов в языке C++? Ответ зависит от того, сколько бит вам требуется и какие операции вы хотите выполнять удобно и эффективно. В качестве наборов битов можно использовать целочисленные типы.
•
bool•
char•
short•
int•
long intУказанные выше размеры являются типичными, но в разных реализациях они могут быть разными, поэтому в каждом конкретном случае следует провести тестирование. Кроме того, в стандартных библиотеках есть свои средства для работы с битами.
•
std::vector<bool>•
std::bitset•
std::set• Файл: много битов (раздел 25.5.6).
Более того, для представления битов можно использовать два средства языка С++.
• Перечисления (
enum• Битовые поля; см. раздел 25.5.5.
Рассмотрим сначала целые числа. Для них в языке C++ предусмотрены побитовые логические операции, непосредственно реализуемые аппаратным обеспечением. Эти операции применяются к каждому биту своих операндов.

Вам может показаться странным то, что в число фундаментальных операций мы включили “исключительное или” (
^<<ostream