通过引用返回指针 我看到一些C++,看起来是这样的: const Foo*& ptr = GetPointerToFoo();

通过引用返回指针 我看到一些C++,看起来是这样的: const Foo*& ptr = GetPointerToFoo();,c++,C++,它的作用似乎与: const Foo* ptr = GetPointerToFoo(); 甚至: Foo* ptr = GetPointerToFoo(); 在第一个示例中,和的用法是什么?它是否通过引用传递由GetPointerToFoo()返回的值?这有什么用?只是为了让它运行得更快,这样就不需要复制这个指针了吗?如果是这样的话,它似乎是一个相当复杂的实现,在速度上有很小的提高。。。或者这里使用和还有其他原因吗? constfoo*&ptr:引用使指针本身可变。这个 调用者可以修改内部指

它的作用似乎与:

const Foo* ptr = GetPointerToFoo();
甚至:

Foo* ptr = GetPointerToFoo();
在第一个示例中,
的用法是什么?它是否通过引用传递由
GetPointerToFoo()返回的值?这有什么用?只是为了让它运行得更快,这样就不需要复制这个指针了吗?如果是这样的话,它似乎是一个相当复杂的实现,在速度上有很小的提高。。。或者这里使用
还有其他原因吗?

  • constfoo*&ptr
    :引用使指针本身可变。这个 调用者可以修改内部指针(例如指向nullptr),但不能修改内部内容(这可能是无用的)
  • const Foo*ptr
    :指向不可变内容的指针。打电话的人可以 不修改内部指针
  • Foo*ptr
    :指向可变内容的指针。调用方可以修改 内部内容,但不是内部指针
注意:通过引用返回指针是另一种间接方法,它不会使代码更快

注意:我假设问题中有三个不同的
GetPointerToFoo()

  • constfoo*&ptr
    :引用使指针本身可变。这个 调用者可以修改内部指针(例如指向nullptr),但不能修改内部内容(这可能是无用的)
  • const Foo*ptr
    :指向不可变内容的指针。打电话的人可以 不修改内部指针
  • Foo*ptr
    :指向可变内容的指针。调用方可以修改 内部内容,但不是内部指针
注意:通过引用返回指针是另一种间接方法,它不会使代码更快


注意:我假设问题中有三个不同的
GetPointerToFoo()

这与通过引用返回任何内容相同。在这种情况下,它只是毫无意义(没有双关语)。@nos您不可能知道是什么。如果编译:
const Foo*&ptr=GetPointerToFoo(),则不应:
Foo*ptr=GetPointerToFoo()(虽然由于允许非常量引用绑定到临时变量的扩展,MSVC中可能允许它),但它也不应该与MSVC一起工作,因为扩展似乎不适用于标量类型(如指针)。这与通过引用返回任何内容相同。在这种情况下,它只是无意义的(没有双关语)@nos您不可能知道是什么。如果编译:
const Foo*&ptr=GetPointerToFoo(),则不应:
Foo*ptr=GetPointerToFoo()(虽然由于允许非常量引用绑定到临时变量的扩展,MSVC中可能允许它),但它也不应该与MSVC一起工作,因为扩展似乎不适用于标量类型(如指针)。不一定是无用的。也许你想改变一个内部策略对象,由于某种原因,它不应该改变它在该上下文中的状态。不一定是无用的。也许您想更改一个内部策略对象,由于某种原因,该对象在该上下文中不应更改其状态。