小编use*_*367的帖子

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

以下代码是否调用任何类型的实现定义或未定义的行为?我不确定与引用的交互是如何工作的,我的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;
}
Run Code Online (Sandbox Code Playgroud)

当Fn中的赋值发生时,我不确定哪两个应该出现:

  1. 调用S的默认复制赋值运算符s_main(作为s_arg引用的目标),将数据从本地(to Fn)复制s_fnmain本地s_main(通过s_arg引用,使一切正常并且定义良好).
  2. 引用本身已分配,现在引用Fn本地s_fn.Fn现在正在返回对本地数据的引用,程序现在正在等待从其中调用另一个函数main,覆盖Fn本地s_fn并导致一般混乱.

c++ reference

5
推荐指数
1
解决办法
928
查看次数

标签 统计

c++ ×1

reference ×1