【发布时间】:2012-02-16 01:33:38
【问题描述】:
以下代码编译并执行“正确的事情”:
#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<> 和访问如何工作的一个很好的解释得到了加分:)
【问题讨论】:
-
通过将它们包装在一个对象中。
<< sizeof(std::vector<char>&), sizeof(std::vector<char>), sizeof(T); struct T { std::vector<char>& r; };56, 56, 8
标签: c++ boost boost-variant