Я возился с новым размещением и сделал этот код:
#include <iostream>
#include <functional>
#include <new>
int main()
{
char memory[sizeof(int)]; //memory to hold type
auto ref = std::ref(*new (memory) int{5}); //allocating int in memory, and make a reference to it
std::cout << ref << std::endl;
new (memory) unsigned{6}; //"overwrite"
std::cout << ref << std::endl;
}
Вывод 5
, затем 6
, но правильно ли он определен? Если да, можно ли вместо этого использовать float
в качестве второго типа?
unsigned int
черезstd::reference_wrapper<int>
, который является оболочкой ссылки наint
. Поэтому мы можем сказать, что вы получаете доступ кunsigned int
черезint &
. Это законно? Я бы сказал УБ. - person skypjack   schedule 25.02.2017operator T& ()
. - person marcinj   schedule 25.02.2017U
черезT *
редко бывает хорошей идеей (не считая полиморфизма, конечно). - person skypjack   schedule 25.02.2017unsigned int
использовать псевдонимint
(gcc.gnu.org/onlinedocs/gcc /Optimize-Options.html). Но это то, что делает gcc, а не то, что говорит стандарт (по крайней мере, насколько мне известно). - person marcinj   schedule 25.02.2017char
у вас нет гарантии, что память правильно выровнена. Уже сint
вы должны использоватьstd::aligned_storage
. С несколькими типами (int
,float
...) взгляните наstd::aligned_union
- person manlio   schedule 27.02.2017