将引用参数传递给值参数
passing reference argument to value argument
忽略以下C++代码中可能完成的任何编译器优化,是
void f(int n) {
n += 1;
}
void g(int &n) {
f(n);
}
相当于
void f(int n) {
n += 1;
}
void g(int *n) {
f(*n);
}
?
那么在使用引用参数时,仍然可以在不那么明确可见的地方制作值副本?
编辑我问的是是否可以使用参考参数制作实际值副本。当像第二种情况一样使用指针时,我显式取消引用指针以按值传递,但是使用引用参数有时会隐式取消引用吗?是我的问题。
我问的是是否可以使用参考参数制作实际值副本。
绝对。它是参考的事实无关紧要。您可以像对待它引用的对象一样对待它。
当像第二种情况一样使用指针时,我显式取消引用指针以按值传递,但是使用引用参数有时会隐式取消引用吗?
您将引用视为某种隐藏指针。术语在这里并没有真正的帮助。"取消引用"是你对指针而不是引用执行的操作。事实上,该标准已更改为使用"执行间接"而不是"取消引用"来帮助澄清这一点。关键是,引用没有被取消引用,因为这不是发生的事情 - 你只是在复制被引用的对象。
相关文章:
- 为什么默认复制函数在按值发送参数时不调用?
- 如何在另一个函数中使用返回值作为参数?
- 为什么 string_view::operator== 按值接受参数
- 在 c++ 中,如果我创建一个接受一个具有默认值的参数的构造函数 - 它会用作默认(空)构造函数吗?
- 在子类函数覆盖中省略具有默认值的参数
- C++区分函子和值模板参数
- 函数作为具有默认值的参数
- Lambda闭包左值可以作为右值参考参数传递
- const变量是否可以在具有默认值的参数中赋值(作为可选参数)
- 向心Catmull-Rom样条曲线插值alpha参数
- 当我按值传递参数时对象被破坏时?
- 如何强制函数仅接受左值引用参数
- 用于赋值的参数化构造函数
- 为什么C++可变参数模板不接受 iostream 值作为参数?
- 移动 l 值参考参数是否是一种不好的做法?
- 为什么静态常量字符 * const 变量在为左值时可绑定到右值引用参数
- 具有默认值的参数的自动类型扣除
- 推导用户定义的值模板参数(C++2a、P0732R2)
- 将 r 值引用传递给 r 值引用参数时出错
- C++ 基构造函数左值到参数