Можно ли возвращать ссылку на локальную переменную из функции? Под локальным я подразумеваю, что переменная будет создана (в стеке, то есть без использования 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 (локальную переменную в этой функции).
В обоих вышеописанных случаях копирование возвращаемого значения не происходит, не так ли. Я хотел бы предотвратить копирование возвращаемых значений, поскольку возвращаемое значение может быть большим.
Заранее спасибо.
Рагхава.
Вы можете вернуть ссылку на статическую локальную переменную в функции. В противном случае это рецепт катастрофы, поскольку локальная переменная уничтожается после возврата из функции.
Может оказаться полезным следующее , в котором используется тот же пример, который вы привели в своей первой ссылке.
РЕДАКТИРОВАТЬ 2:
Для пункта ii в вашем посте давайте предположим функцию «fn», как показано
int& fn(){
static int x;
return x;
}
int a = fn();
. Это включает в себя копию из Lvalue выражения «fn».
Не подразумевает копию, если она была
int &a = fn();
предполагая, что 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 является локальной копией, ее изменение не влияет на исходную переменную