2016-01-27 3 views
-1

Я видел некоторые C++, который выглядит следующим образом:Возвращаясь указатель по ссылке

const Foo*& ptr = GetPointerToFoo(); 

Что, кажется, делает ту же работу, как:

const Foo* ptr = GetPointerToFoo(); 

Или даже:

Foo* ptr = GetPointerToFoo(); 

Каково использование & в первом примере? Передает ли оно значение, возвращаемое GetPointerToFoo() по ссылке? Каким будет использование этого? Это просто, чтобы заставить его работать быстрее, чтобы этот указатель не нужно копировать? Если это так, это представляется довольно сложной реализацией для очень небольшого увеличения скорости ... Или есть другие причины использовать здесь &?

+3

Это то же самое, что и возвращение * ничего * по ссылке. – juanchopanza

+2

В этом случае это просто бессмысленно (каламбур не предназначен). – nos

+0

@nos Вы не можете знать, что. – juanchopanza

ответ

2
  • const Foo*& ptr: Ссылка делает сам указатель изменчивым. Вызывающий абонент может изменять внутренний указатель (например, до nullptr), но не внутренний контент (что, вероятно, бесполезно).
  • const Foo* ptr: Указатель на неизменяемый контент. Вызывающий абонент может не изменять внутренний указатель.
  • Foo* ptr: Указатель на изменяемый контент. Вызывающий абонент может изменять внутренний контент , но не внутренний указатель.

Примечание: Возврат указателя по ссылке является другим косвенным и делает код не быстрее.

Примечание: Я предполагаю, что три различных GetPointerToFoo() в вопросе.

+0

Не обязательно _ бесполезно. Возможно, вы хотите изменить внутренний объект стратегии, который по какой-то причине не должен изменять свое состояние в этом контексте. –

Смежные вопросы