函数调用:使用引用保证不会导致重定位吗?

问题描述

通过引用将向量传递给函数时,函数调用 是否保证保留指向向量元素的指针的有效性

假设函数,未采取任何可能导致向量重定位的操作,例如push_back()

示例:

int* fun(vector<int> &w) {
    return &w[10];
}

vector<int> v( /* filled with 100 random elements */ )
int *p = &v[10];
int *q = fun(v); // return pointer to v[10] element via fun()
int *r = &v[10];

bool t1 = (p == q) && (*p == *q); // always guaranteed to be true??
bool t2 = (p == r) && (*p == *r); // always guaranteed to be true??

尽管肯定地说似乎很容易,但可以,当然函数调用本身不会使指向我具有的向量元素的指针无效(无论在函数内部还是外部)一直在调查这个问题而没有找到确定的答案。

问题也可以表述为:是一个函数调用,使用“按引用矢量”(如示例中所示), 保证 不导致矢量和是要重定位的元素吗?

一个更笼统的问题是:对于任何类型的对象或容器X:是使用对X的引用的函数调用 保证不会导致{{1 }}或其任何组成部分

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)