12
次のコードはコンパイルされ、「正しいこと」を行います。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);構造体T {std :: vector & r;}; '56,56,8 –