gpt4 book ai didi

c++ - 将引用参数分配给局部变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:35 24 4
gpt4 key购买 nike

以下代码是否调用了任何类型的实现定义或未定义的行为?我不确定与引用文献的交互是如何进行的,我的 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 中时,我不确定应该发生两者中的哪一个:

  1. S 的默认复制赋值运算符在 s_main 上调用(作为 s_arg 引用的目标),从本地复制数据(到 Fn ) s_fnmain 的本地 s_main (通过 s_arg 引用,使一切正常和定义明确。
  2. 引用本身已分配,现在引用 Fn 的本地 s_fnFn 现在返回对本地数据的引用,程序现在只是等待从 main 调用另一个函数,覆盖 Fn 的本地 s_fn 并造成普遍困惑。

最佳答案

这里没有 UB,引用指向 s_main,您将 s_fn 的值赋给 s_arg(指向 s_main),一切正常。请记住,引用(与指针不同)一旦初始化就不能指向内存中的另一个区域,这意味着您提到的第二种情况不会发生。

关于c++ - 将引用参数分配给局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17498860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com