将引用参数分配给局部变量
Assigning reference argument to local variable
以下代码是否调用任何类型的已定义或未定义的实现行为?我不确定与参考的交互是如何工作的,我的Google/SO搜索结果是空的:
struct S {
int i;
};
void Fn(S& s_arg) {
S s_fn{s_arg.i+1};
s_arg = s_fn;
}
int main(int argc, char** argv) {
S s_main{15};
Fn(s_main);
return 0;
}
我不确定当Fn:中发生分配时,应该发生这两种情况中的哪一种
- S的默认复制分配运算符在
s_main
(s_arg
引用的目标)上调用,将数据从本地(到Fn
)s_fn
复制到main
的本地s_main
(通过s_arg
引用),使所有内容都正确且定义良好 - 引用本身已分配,现在引用
Fn
的本地s_fn
。Fn
现在正在返回对本地数据的引用,而程序现在只是在等待从main
调用另一个函数,从而覆盖Fn
的本地s_fn
,并造成总体混乱
这里没有UB,引用指向s_main,您将s_fn的值分配给s_arg(指向s_main),一切都很好。请记住,引用(与指针不同)一旦初始化就不能指向内存中的另一个区域,这意味着您提到的第二种情况不会发生。
引用(与指针不同)的"地址"不能更改。因此,将调用赋值运算符。
C++引用不能"重新定位"或使其引用与最初不同的对象。这排除了你的可能性#2。代码正常。
相关文章:
- 使用的未初始化局部变量'Quick'
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- 将共享指针传递给函数参数 - 将其分配给局部变量的正确方法是什么
- 分配给静态变量的局部变量;编译错误在'c'但在 C++ 中成功
- 局部变量 'sp' 在被读取之前在所有路径中重新分配
- C++标准对局部变量的存储和分配有什么保证?
- 指针被分配给错误的局部变量
- 将局部方法变量分配给类指针
- 当函数结束时,它的局部变量被解除分配
- 方法用于最快的分配,并且不需要将动态大小的数组对象作为局部变量
- MASM 局部变量:动态分配的数据
- 为什么为堆栈中的局部变量分配的内存多于C++中所需的内存
- 将引用参数分配给局部变量
- 在 C++ 中将局部变量分配给全局变量
- 如何为局部变量分配内存
- 在c++中,通常在什么时候为局部变量分配内存?
- 在 c++ 中存储块内局部变量的分配
- 返回已分配的局部变量
- c++内存管理对局部变量的内存分配
- c++局部静态变量分配