微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

假设函数,未采取任何可能导致向量重定位的操作,例如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 举报,一经查实,本站将立刻删除。