Il seguente codice compila e fa la "cosa giusta":In che modo boost :: variant store reference?
#include <boost/variant.hpp>
#include <iostream>
int main()
{
int a = 10;
boost::variant<int&, float&> x = a;
a = 20;
std::cout << boost::get<int&>(x) << "\n";
return 0;
}
Come si fa boost :: negozio variante un punto di riferimento? Secondo lo standard C++, il modo in cui i riferimenti sono memorizzati è completamente fino al compilatore. In realtà, in che modo lo boost::variant
sa quanti byte è occupato da un riferimento? sizeof(T&) == sizeof(T)
, quindi non può utilizzare l'operatore sizeof()
. Ora, so che i riferimenti sono probabilmente implementati come indicatori, ma non c'è alcuna garanzia nella lingua. Una buona spiegazione di come funziona la funzione get<>
e la visita quando la variante sta memorizzando i riferimenti ottengono punti extra :)
Incastrandoli in un oggetto. '<< sizeof (std :: vector &), sizeof (std :: vector ), sizeof (T); struct T {std :: vector & r;}; '56, 56, 8 –