通过引用返回指针 我看到一些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一起工作,因为扩展似乎不适用于标量类型(如指针)。不一定是无用的。也许你想改变一个内部策略对象,由于某种原因,它不应该改变它在该上下文中的状态。不一定是无用的。也许您想更改一个内部策略对象,由于某种原因,该对象在该上下文中不应更改其状态。