下面的代码编译并执行“正确的操作”:
#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()运算符。现在,我知道引用很可能是作为指针实现的,但在语言中没有保证。当variant存储引用时,很好地解释get<>和访问是如何工作的,这会获得额外的分数:)
发布于 2014-01-16 20:42:08
您可以将结构字段声明为引用。
struct ref_to_int {
ref_to_int(int& init)
: _storage(init) {} // _storage stores the reference.
private:
int& _storage;
};你可以用sizeof(ref_to_int),这是我和gcc在我的x64上的8。该字段存储引用。
https://stackoverflow.com/questions/9304282
复制相似问题