Типичное использование std :: raund include: < /p>
Получение указателя на объект, созданный в хранении существующего объекта
, то же самое, где позабоченные объекты не могут быть
, потому что он не может быть
, потому что он не может быть
stice object -inember, потому что на положении не может быть
, потому что это объект. subobject);
Получение указателя на объект, созданный путем размещения нового
из указателя на объект, обеспечивающий хранилище для этого объекта.
Я думаю, что это действительно необходимо для первого сценария. Тем не менее, это не кажется необходимым для второго. Например: < /p>
int main() {
struct A { int n; };
alignas(A) unsigned char buf[sizeof(A)]{};
auto p = new (buf) A{1}; // The object is implicitly created (since C++20).
std::cout n; // OK, the output is gauaranteed to be 1.
}
Обратите внимание, что нам не нужно писать Auto p = std :: raunder (new (buf) a {1}); , чтобы избежать ub.
>
Типичное использование std :: raund include: < /p> [list] [*] Получение указателя на объект, созданный в хранении существующего объекта , то же самое, где позабоченные объекты не могут быть , потому что он не может быть , потому что он не может быть stice object -inember, потому что на положении не может быть , потому что это объект. subobject); [*] [b] Получение указателя на объект, созданный путем размещения нового из указателя на объект, обеспечивающий хранилище для этого объекта. [/b] [/list]
Я думаю, что это действительно необходимо для первого сценария. Тем не менее, это не кажется необходимым для второго. Например: < /p> [code]int main() { struct A { int n; }; alignas(A) unsigned char buf[sizeof(A)]{};
auto p = new (buf) A{1}; // The object is implicitly created (since C++20). std::cout n; // OK, the output is gauaranteed to be 1. } [/code] Обратите внимание, что нам не нужно писать Auto p = std :: raunder (new (buf) a {1}); , чтобы избежать ub. >
Я пытаюсь понять следующий фрагмент из ссылки CPP. Может ли кто -нибудь более подробно объяснить, почему x2 недоступен от источника ? Разве мы не можем достичь этого через & x2 + 10 Например?int x2 ;
auto p2 = std::launder(reinterpret_cast(&x2 ));...
Я пытаюсь понять следующий фрагмент из ссылки CPP. Может ли кто -нибудь более подробно объяснить, почему x2 недоступен от источника ? Разве мы не можем достичь этого через & x2 + 10 Например?int x2 ;
auto p2 = std::launder(reinterpret_cast(&x2 ));...
Я прочитал некоторое чтение на std :: raunder , и я подумал о сценарии, который стандарт, казалось, не учитывает. p представляет адрес a байта в памяти
Объект x находится на адресе a
x находится в пределах своей жизни
Тип x такой же, что и T,...
Я прочитал некоторое чтение на std :: raunder , и я подумал о сценарии, который стандарт, казалось, не учитывает. p представляет адрес a байта в памяти
Объект x находится на адресе a
x находится в пределах своей жизни
Тип x такой же, что и T,...