次のコードはコンパイルされ、「正しいこと」を実行します。
#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;
}
boost::variant は参照をどのように保存しますか? C++ 標準によると、参照の格納方法は完全にコンパイラ次第です。実際、boost::variant
参照によって何バイトが使用されているかをどうやって知るのでしょうか? 、したがって、演算子sizeof(T&) == sizeof(T)
を使用することはできません。sizeof()
現在、参照はおそらくポインターとして実装されていることはわかっていますが、言語には保証がありません。get<>
バリアントが参照を保存しているときに訪問がどのように機能するかについての良い説明は、追加のポイントを獲得します:)