Следующий код компилирует и выполняет «правильную вещь»:Каким образом ссылки на boost :: variant хранятся?
#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;
}
Как повысить :: вариант сохранить ссылку? Согласно стандарту C++, как хранятся ссылки, полностью зависит от компилятора. На самом деле, как boost::variant
знает, сколько байтов занято ссылкой? sizeof(T&) == sizeof(T)
, поэтому он не может использовать sizeof()
оператора. Теперь я знаю, что ссылки, скорее всего, реализованы как указатели, но на этом языке нет никакой гарантии. Хорошее объяснение того, как get<>
и посещения работают, когда вариант хранит ссылки, получают дополнительные баллы :)
Обернуть их в объект. '<< sizeof (std :: vector &), sizeof (std :: vector ), sizeof (T); struct T {std :: vector & r;}; '56, 56, 8 –