1. Задача: Определить порядок вывода в консоль при выполнении кода
struct A { A() { std::cout << "A()" << std::endl; } ~A() { std::cout << "~A()" << std::endl; } };
struct B { B() { std::cout << "B()" << std::endl; } ~B() { std::cout << "~B()" << std::endl; } };
struct C { C() { std::cout << "C()" << std::endl; } ~C() { std::cout << "~C()" << std::endl; } };
struct D { D() { std::cout << "D()" << std::endl; } ~D() { std::cout << "~D()" << std::endl; } };
struct E : private D {
E() : c(), b(), a() {
std::cout << "E()" << std::endl;
a.reset(new A);
throw std::runtime_error("err");
}
~E() { std::cout << "~E()" << std::endl; }
std::unique_ptr<A> a; B b; C c;
};2. Как изменится поведение, если объект E будет создан динамически через new?
3. Задача: Анализ функции подсчета битов
int f(int n) {
int i = 0;
while (n) {
n &= n - 1;
++i;
}
return i;
}4. Как оптимизировать функцию f(n)?
5. Достаточно ли оптимизировано решение с использованием массива результатов?
6. Как оптимизировать подсчет битов на архитектуре x86?
7. Задача: Code-review реализации FileCollector
Необходимо проанализировать предложенный фрагмент кода для сбора файлов из чанков в многопоточной среде (multiple producers — single consumer) и указать на недостатки.
class FileCollector {
public:
void CollectFile(uint32_t fileId, size_t fileSize) noexcept { storage_[fileId] = std::string(fileSize, '