通过引用和指针C++传递参数
passing arguments via reference and pointer C++
>我正在查看一个代码片段,我有这个序列。
class MyVariable {
....
CustomType z;
....
}
答.cpp
调用函数f ( & myVariable)
在一个包含的文件中,我确实有这个:
B.h
void f ( MyVariable * myVariable);
B.cpp
f( MyVariable * myVariable){
CustomType & x = myVariable ->g();
}
其中 g 是类 MyVariable 的方法,实现是:
CustomType & g() {
...
return z; //where you can find z in the class
}
不过对我来说看起来很复杂,所以我的问题是:
对 x 的任何更改是否反映到 在 A.cpp 中的函数调用中用作参数的 myVariable 中?
换句话说,如果在 B.cpp 中,我做这样的事情:
// change x with some value
这种变化也会反映在myVariable中吗?
是的。任何地方都没有副本,因为当您将变量从一个地方"传递"到另一个地方时,您要么使用指针,要么使用引用,因此您实际上在任何地方都使用相同的变量。
在g()
中,你返回对z
的引用,然后在f()
中保留对z
的引用。此外,当你调用f()
时,你甚至不复制myVariable
,而是复制它的地址(以指针的形式),所以你实际上会修改你在A.cpp
中拥有的myVariable
变量的z
成员。
x
是对myVariable
z
成员的非常量引用,所以是的,如果你改变x
,myVariable->z
也会改变。
您可以将引用视为别名,x
只是myVariable->z
的另一个名称。
是的,
因为传递了变量地址,函数中 x 的任何更改都会更改调用函数的变量的值。两个指针都引用相同的内存位置。因此,一个值的变化会自动更改其他值。
每当通过引用或地址传递变量时,被调用函数中对该变量的任何更改都会反映在调用方函数中。为了回答您的问题,是的,对 X 的任何更改都将反映到 myVariable 中,即使 X 是私有变量,这也适用。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 如何将enable-if与模板参数和参数包一起使用