Какая новая функция в C++20 [[no_unique_address]]?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Какая новая функция в C++20 [[no_unique_address]]?

Сообщение Anonymous »

Я несколько раз читал новую функцию c++20 no_unique_address и надеюсь, что кто-нибудь сможет объяснить и проиллюстрировать ее примером лучше, чем этот пример ниже, взятый из справочника по C++.

Объяснение Применяется к имени, объявленному в объявлении
нестатического элемента данных, который не является битовым полем.
Указывает что этот элемент данных не обязательно должен иметь отдельный адрес из
всех других нестатических членов данных своего класса. Это означает, что если
член имеет пустой тип (например, распределитель без сохранения состояния), компилятор может
оптимизировать его, чтобы он не занимал места, как если бы это была пустая база. Если
элемент не пуст, любое заполнение его хвоста также может быть повторно использовано
для хранения других элементов данных.

Код: Выделить всё

#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]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»