weixin_43888078
2020-04-04 21:24
采纳率: 50%
浏览 1.2k

求解 vector<int> &v = vector<int>(100);这种初始化方式

为什么这里可以直接用 vector < int >(100)的方式申请空间。这种写法的原理是什么?这块申请的空间是在堆区还是栈区?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • BugM 2020-04-06 19:01
    已采纳

    这段代码应该会报错把,引用是不能用右值初始化的。vector(100) 是定义了一个匿名变量(也就是这个变量没有名字),这个变量只能作为右值。

    关于是堆上还是栈上的问题,这个临时变量是局部变量,所以是在栈上定义的,但是v里面的100个元素是在堆上的,这是vector类的设计问题。

    vector里面维护了三个迭代器,一个是first,一个是finish,一个是end_of_storage,分别指向begin(), end(),和最后一个元素的后一个位置,v中的元素都是存在堆上的

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • threenewbee 2020-04-04 22:22

    这个其实和
    int &b = int(1);
    是一样的道理

    没有申请任何空间,是否在堆栈上取决于这行代码是不是函数的局部变量,如果是,就在堆栈上。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题