С/С++ Portal | Программирование
@Cpportal
22 642
Foo, изменяет его значение и выводит:public: 2 private: 43private больше не выглядит такой уж непробиваемой границей
// финальный шаг avalanche (лавинный эффект)
// перемешивает оставшиеся биты, чтобы небольшие изменения
// распространялись повсюду
static uint32_t avalanche(uint32_t h)
{
h ^= h >> 15;
h *= 0x2c1b3c6d;
h ^= h >> 12;
h *= 0x297a2d39;
h ^= h >> 15;
return h;
}
// помогает равномерно распределять близкие значения хеша
libdivide позволяет полностью его избежать.
std::indirect<Impl> impl_;std::indirect и std::polymorphic.indirect<T> — значение, размещённое в куче, с автоматической семантикой копирования.polymorphic<T> — то же самое, но при копировании сохраняет производный тип. Виртуальная диспетчеризация с value semantics.
std::vector увеличивает свою емкость, он поочередно копирует каждый элемент, а затем уничтожает исходные объекты.string, unique_ptr, сам vector), такое копирование с последующим уничтожением — лишняя работа.memcpy.trivially_relocatable, и контейнеры смогут переносить элементы одним вызовом memcpy вместо копирования с последующим уничтожением.vector для распространенных типов: от 2 до 10 раз.