以下代码编译并执行“正确的事情”:
#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<>
和访问如何工作的一个很好的解释得到额外的点:)
答案 0 :(得分:6)
您可以将struct字段声明为引用。
struct ref_to_int {
ref_to_int(int& init)
: _storage(init) {} // _storage stores the reference.
private:
int& _storage;
};
您可以使用gcc在我的x64上使用sizeof(ref_to_int)
8
。该字段存储引用。