按参数引用或按参数引用之间的差异
Difference between reference by argument or reference by parameter?
我想知道将对象引用作为参数或参数传递之间是否有任何区别。下面的代码是等效的吗?是否存在我应该使用其中一种的情况?
void foo(Object &object){
object.update()
}
Object object
foo(object)
与
void bar(Object *object){
object->update()
}
Object object
bar(&object)
你似乎有点困惑。您的所有示例都没有按值传递。第一个示例通过引用传递,第二个示例通过指针传递。
主要区别是:
按值传递 foo(Object object)
:该函数获取参数的副本,并且无法更改原始参数。
通过引用传递foo(Object& object)
:该函数获取对原始对象的引用(而不是复制)并可以对其进行修改。引用不能是"未绑定的",它们总是引用一个有效的对象(某些例外通常是错误)。
通过指针传递 foo(Object* object)
:作为通过引用传递,除了指针不引用任何内容是有效的(它可以是nullptr
如果您需要发出信号,这很有用)。
当您通过引用获取并且函数可以内联时,编译器 - 理论上 - 不需要生成实例的地址。根据您的类型,一元前缀operator&()
可能不仅仅是返回this
。此外,指针为 nullptr 是有效的,您应该检查这一点(或使用 gsl 的 not_null
)。
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 具有常量引用参数的函数模板专用化
- C++:常量引用参数
- 字符串引用参数的效率C++
- 通过非常量引用参数修改常量引用参数
- 如何将指针变量作为引用参数传递?
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- 移动类的成员作为常量引用参数传递
- C++带有适用于左值和右值的引用参数的函数
- constexpr 函数的常量引用参数:gcc/msvc vs clang/icc
- 如何使用类型特征将函数的通用引用参数限制为 r 值引用?
- 委托构造函数和引用参数
- 对 const 引用参数使用默认值会导致崩溃
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 如何强制函数仅接受左值引用参数
- 模板引用参数推断失败C++
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 将unique_ptr作为引用参数或常量传递unique_ptr引用