C 参考与宏替换一样工作
Do c++ references work like macro substitutions?
std::vector<int> v;
v.push_back(1);
int &r0=v[0],*p0=&v[0];
v.insert(v.begin(),0);
for (int i=2; i<1000000; i++) v.push_back(i);
我插入并添加其他元素后,整个向量可能会转移到其他内存位置?
那么R0和P0将返回什么?
如果向量发生了变化,我猜我猜P0会指向垃圾,但参考仍会起作用(即返回0(吗?引用类似于宏替代吗?
参考与宏替换不一样。
任何增加std::vector
大小的操作都会使其end()
迭代器无效。如果调整大小还增加了向量的容量(即重新关注基础内存(,则begin()
迭代器也无效。
这意味着r0
和p0
都可能无效。不需要检查和比较调整大小之前和之后的v.capacity()
的结果(并且证实没有容量的变化(,不能保证r0
和p0
参考或指向向量v
的第一个元素。
用于更新向量的大小和容量的策略是实现定义的。鉴于您的代码正在插入一百万和一个元素(1000001
(,因此容量在某个时候很可能会增加,并且r0
和p0
均无效(即剩下的悬挂( - 实际上,std::vector
的实现很少会使用添加该数量元素时不需要调整大小的策略。因此,实际上,r0
和p0
都是无效的。
向量的地址(即&v
(不会更改。由v
管理的数据(v.capacity()
,v.size()
,v.data()
,v.begin()
,v.end()
等(是(潜在的(会更改。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 像自定义类一样构造的指针(内置类型)如何工作?
- C++11: 如何编写一个像 Get 一样工作的模板函数<tuple>...但是收到参数包?
- 右值引用是否像右值引用一样工作
- C 参考与宏替换一样工作
- 为什么 gRPC C++ 客户端在没有显式服务器的 SSL 证书的情况下无法工作,就像在示例中一样?
- 如何与非平凡的成员这样的工会像班级一样正常工作
- 如何在 C++ 中创建一个类,使其像本机 int 类一样工作
- C++ 二叉搜索算法像lower_bound一样工作
- 是否有可能使自己的winapi功能像getpixel一样在Windows上工作
- 如何让 ss << f 像 printf( "%g" , f) 一样工作;
- 定义一个像 Python "with" 语句一样工作的 C 宏有什么缺点?
- c++中是否有任何数据结构或库可以像Python列表和字典一样工作?
- 为什么int8像char一样工作(c++) (Visual Studio 2015)
- 为什么getchar像缓冲区一样工作,而不是像预期的那样实时工作?
- 搜索一个数据结构,它可以像地图一样工作,也可以检索其他信息
- 传递常量引用…它像最重要的const一样工作吗
- 我能让赋值运算符像复制构造函数一样工作吗
- C++:"such strings"类型。使像 fun( "str" ) 一样的函数调用工作
- 我怎样才能让一对向量像哈希表一样工作呢?