Читать «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14» онлайн - страница 225
Скотт Мейерс
15
Непереводимая игра слов, основанная на использовании для обычного указателя названия “raw pointer” (дословно — “сырой указатель”). —
16
В разделе 5.3 поясняется, что к универсальным ссылкам почти всегда может применяться std::forward
, так что, когда эта книга готовилась к печати, некоторые члены сообщества С++ начинали именовать универсальные ссылки
17
Такими локальными объектами являются большинство локальных переменных (например, такие как w
в makeWidget
), а также временные объекты, создаваемые как часть инструкции return
. Параметры функции на такое звание претендовать нс могут. Некоторые программисты различают применение RVO к именованным и неименованным (т.e. временным) локальным объектам, ограничивая термин “RVO” неименованными объектами и называя его применение к именованным объектам
18
Известная история о том, что об одном и том же до средины наполненном стакане пессимисты говорят, что он наполовину пуст, а оптимисты — что он наполовину полон. —
19
Здесь предполагается, что битовые поля располагаются от младшего бита к старшему. С++ это не гарантирует, но компиляторы часто предлагают механизм, который позволяет программисту управлять схемой размещения битовых полей.
20
std::bind
всегда копирует свои аргументы, но вызывающий код может добиться эффекта сохранения аргумента по ссылке путем применения std::ref
. Результат вызова
auto compressRateB = std::bind(compress, std::ref(w), _1);
состоит в том. что compressRateB
действует так, как если бы сохранялась ссылка на объект w
, а не его копия.
21
В предположении, что таковая имеется. В некоторых встроенных системах ее нет.
22
Это упрощение. Значение имеет не фьючерс, для которого вызывается get
или wait
, а совместно используемое состояние, на которое ссылается фьючерс. (В разделе 7.4 обсуждается взаимосвязь фьючерсов и совместно используемых состояний.) Поскольку std: future
поддерживают перемещение, а также могут использоваться для построения std::shared_future
и поскольку std::shared_future
могут копироваться, объект фьючерса, ссылающийся на совместно используемое состояние, возникающее из вызова std::async
, в который была передана f
, вероятно, будет отличаться от фьючерса, возвращенного std::async
. Однако обычно просто говорят о вызове функций-членов get
или wait
фьючерса, возвращенного из std::async
.
23
Часто их переводят как std::thread
, при вызове функции join
, как и отключение для происходящего при вызове функции detach
. —
24
Вы можете обратиться к книге Энтони Вильямса (Anthony Williams)
25
В разделе 7.5 поясняется, что разновидность канала связи фьючерса может быть использована и для других целей. Однако в этом разделе мы будем рассматривать только его применение в качестве механизма для передачи результата из вызываемой функции вызывающей.