Поле без уникального адреса в C++
Атрибут no_unique_address разрешает компилятору не выделять отдельный адрес пустому полю или полю нулевого размера внутри объекта.
Так экономят место в агрегатах с политиками
и пустыми тегами. Запишем структуру
с пустым членом, выведем sizeof
типа и сравним с обычным целым полем:
#include <iostream>
struct Empty {};
struct Node {
[[no_unique_address]] Empty tag;
int value;
};
int main() {
std::cout << sizeof(Node) << "\n";
return 0;
}
Добавьте структуру Holder
с [[no_unique_address]] Empty
и полем char c. Выведите
sizeof(Holder).