Объяснение Применяется к имени, объявленному в объявлении
нестатического элемента данных, который не является битовым полем.
Указывает что этот элемент данных не обязательно должен иметь отдельный адрес из
всех других нестатических членов данных своего класса. Это означает, что если
член имеет пустой тип (например, распределитель без сохранения состояния), компилятор может
оптимизировать его, чтобы он не занимал места, как если бы это была пустая база. Если
элемент не пуст, любое заполнение его хвоста также может быть повторно использовано
для хранения других элементов данных.
Код: Выделить всё
#include
struct Empty {}; // empty class
struct X {
int i;
Empty e;
};
struct Y {
int i;
[[no_unique_address]] Empty e;
};
struct Z {
char c;
[[no_unique_address]] Empty e1, e2;
};
struct W {
char c[2];
[[no_unique_address]] Empty e1, e2;
};
int main()
{
// e1 and e2 cannot share the same address because they have the
// same type, even though they are marked with [[no_unique_address]].
// However, either may share address with c.
static_assert(sizeof(Z) >= 2);
// e1 and e2 cannot have the same address, but one of them can share with
// c[0] and the other with c[1]
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/62784750/what-is-the-new-feature-in-c20-no-unique-address[/url]
Мобильная версия