вопрос о функции, возвращающей ссылку в C ++

Можно ли возвращать ссылку на локальную переменную из функции? Под локальным я подразумеваю, что переменная будет создана (в стеке, то есть без использования new) внутри функции, и ее область действия находится только внутри этой функции. Я получил противоречивые ответы, когда искал об этом. 1) говорит, что вид использования является правильным, но 2) противоречит ему.

1) http://functionx.com/cpp/examples/returnreference.htm
2) http: // www.cprogramming.com/tutorial/references.html (в разделе «Рекомендации и безопасность»)

Что из них является правильным?

Другой вопрос, который у меня возник, заключается в том, что если 1) верно, то следующие цели служат той же цели.

i) int & a = func ();

Можно ли возвращать ссылку на локальную переменную из функции? Под локальным я подразумеваю, что переменная будет создана (в стеке, то есть без использования new) внутри функции, и ее область действия находится только внутри этой функции. Я получил противоречивые ответы, когда искал об этом. 1) говорит, что вид использования является правильным, но 2) противоречит ему.

1) http://functionx.com/cpp/examples/returnreference.htm
2) http: // www.cprogramming.com/tutorial/references.html (в разделе «Рекомендации и безопасность»)

Что из них является правильным?

Другой вопрос, который у меня возник, заключается в том, что если 1) верно, то следующие цели служат той же цели.

i) int & a = func ();

Можно ли возвращать ссылку на локальную переменную из функции? Под локальным я подразумеваю, что переменная будет создана (в стеке, то есть без использования new) внутри функции, и ее область действия находится только внутри этой функции. Я получил противоречивые ответы, когда искал об этом. 1) говорит, что вид использования является правильным, но 2) противоречит ему.

1) http://functionx.com/cpp/examples/returnreference.htm
2) http: // www.cprogramming.com/tutorial/references.html (в разделе «Рекомендации и безопасность»)

Что из них является правильным?

Другой вопрос, который у меня возник, заключается в том, что если 1) верно, то следующие цели служат той же цели.

i) int & a = func ();
без использования new) внутри функции, и ее область действия находится только внутри этой функции. Я получил противоречивые ответы, когда искал об этом. 1) говорит, что вид использования является правильным, но 2) противоречит ему.

1) http://functionx.com/cpp/examples/returnreference.htm
2) http: // www.cprogramming.com/tutorial/references.html (в разделе «Рекомендации и безопасность»)

Что из них является правильным?

Другой вопрос, который у меня возник, заключается в том, что если 1) верно, то следующие цели служат той же цели.

i) int & a = func ();
без использования new) внутри функции, и ее область действия находится только внутри этой функции. Я получил противоречивые ответы, когда искал об этом. 1) говорит, что вид использования является правильным, но 2) противоречит ему.

1) http://functionx.com/cpp/examples/returnreference.htm
2) http: // www.cprogramming.com/tutorial/references.html (в разделе «Рекомендации и безопасность»)

Что из них является правильным?

Другой вопрос, который у меня возник, заключается в том, что если 1) верно, то следующие цели служат той же цели.

i) int & a = func ();
Раздел безопасности)

Кто из них прав?

Другой вопрос, который у меня возник, заключается в том, что если 1) верно, то следующие цели служат той же цели.

i) int & a = func ();
Раздел безопасности)

Кто из них прав?

Другой вопрос, который у меня возник, заключается в том, что если 1) верно, то следующие цели служат той же цели.

i) int & a = func ();
ii) int a = func (); где func () возвращает ссылку на int (локальную переменную в этой функции).

В обоих вышеописанных случаях копирование возвращаемого значения не происходит, не так ли. Я хотел бы предотвратить копирование возвращаемых значений, поскольку возвращаемое значение может быть большим.

Заранее спасибо.

Рагхава.

7
задан Raghava 1 September 2010 в 17:51
поделиться

2 ответа

Вы можете вернуть ссылку на статическую локальную переменную в функции. В противном случае это рецепт катастрофы, поскольку локальная переменная уничтожается после возврата из функции.

Может оказаться полезным следующее , в котором используется тот же пример, который вы привели в своей первой ссылке.

РЕДАКТИРОВАТЬ 2:

Для пункта ii в вашем посте давайте предположим функцию «fn», как показано

int& fn(){
static int x;
return x;
}

int a = fn();

. Это включает в себя копию из Lvalue выражения «fn».

Не подразумевает копию, если она была

int &a = fn();
6
ответ дан 6 December 2019 в 07:49
поделиться

предполагая, что func возвращает ссылку на значение, которое существует после возврата функции (статическое локальное или глобальное), тогда ваши

i) int& a = func();
ii) int a = func(); where func() returns a reference to an int (local variable in that function).

сильно отличаются

в (i) a по-прежнему относится к статическому или глобальному. Изменение a изменит исходную переменную

в (ii) a является локальной копией, ее изменение не влияет на исходную переменную

0
ответ дан 6 December 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: