首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >boost::variant存储引用是如何实现的?

boost::variant存储引用是如何实现的?
EN

Stack Overflow用户
提问于 2012-02-16 09:33:38
回答 1查看 2.2K关注 0票数 14

下面的代码编译并执行“正确的操作”:

代码语言:javascript
运行
复制
#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<>和访问是如何工作的,这会获得额外的分数:)

EN

回答 1

Stack Overflow用户

发布于 2014-01-16 20:42:08

您可以将结构字段声明为引用。

代码语言:javascript
运行
复制
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。该字段存储引用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9304282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档