Форум программистов, компьютерный форум CyberForum.ru

Синтаксис. Использование & - C++

Восстановить пароль Регистрация
 
Armahem
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 7
07.02.2014, 19:19     Синтаксис. Использование & #1
Скажите, пожалуйста, чем отличается
C++
1
foo(std::string a);
от этого
C++
1
foo(std::string& a);
?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2014, 19:19     Синтаксис. Использование &
Посмотрите здесь:

Проблема с проверкой условия цикла for( int i=2; !((n%i||d%i)&&!(n%i&&d%i))==0 ; i++) C++
C++ Использование *&
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& C++
C++ Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Frosten
3 / 3 / 5
Регистрация: 28.01.2014
Сообщений: 13
07.02.2014, 19:36     Синтаксис. Использование & #2
Это называется ссылка.
почитай тут
http://ru.wikipedia.org/wiki/%D0%A1%...0%B0_(C%2B%2B)
Armahem
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 7
07.02.2014, 20:03  [ТС]     Синтаксис. Использование & #3
Цитата Сообщение от Frosten Посмотреть сообщение
Это называется ссылка.
почитай тут
http://ru.wikipedia.org/wiki/%D0%A1%...0%B0_(C%2B%2B)
Да, я знаю. Меня больше интересует в чём отличие следующих двух функций:
C++
1
2
3
4
5
6
7
8
9
10
std::string& getNameAmp()
{
     static std::string _name; _name.clear(); _name = "Some_Name";
     return _name;
}
std::string getName()
{
     static std::string _name; _name.clear(); _name = "Some_Name";
     return _name;
}
Ведь обе функции можно использовать так:
C++
1
2
getName().c_str();
getNameAmp().c_str();
Т. е. через точку обращаться к методам класса строки, а не через ->
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
07.02.2014, 20:28     Синтаксис. Использование & #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
getNameAmp вернёт ссылку (то есть, указание "где лежит") на строку, которая уже была уничтожена при выходе из функции и уже нигде не лежит. Работа с этой ссылкой приведёт к неопределённому поведению, на практике - к неправильной работе программы и неожиданным и неочевидным ошибкам.
getName вернёт копию строки, которую никак не затронет уничтожение оригинала и которой можно безопасно пользоваться.
Аналогично, первый вариант foo получает копию строки, и всё, что он проделает с этой копией, не отразится на оригинале. Второй вариант получает ссылку на оригинал и имеет возможность этот оригинал изменить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void foo1(std::string a) {a = "bbb";}
 
void foo2(std::string& a) {a = "bbb";}
 
int main(){
    string x("aaa");
    cout << x;  // напечатает aaa
    foo1(x);
    cout << x;  // снова напечатает aaa
    foo2(x);
    cout << x;  // напечатает bbb
}
Armahem
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 7
07.02.2014, 20:37  [ТС]     Синтаксис. Использование & #5
Спасибо, теперь всё понятно.
Цитата Сообщение от Nick Alte Посмотреть сообщение
getNameAmp вернёт ссылку (то есть, указание "где лежит") на строку, которая уже была уничтожена при выходе из функции и уже нигде не лежит. Работа с этой ссылкой приведёт к неопределённому поведению, на практике - к неправильной работе программы и неожиданным и неочевидным ошибкам. ...
Разве статические переменные уничтожаются при выходе из функции?
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,593
07.02.2014, 20:43     Синтаксис. Использование & #6
Цитата Сообщение от Armahem Посмотреть сообщение
Спасибо, теперь всё понятно.
Разве статические переменные уничтожаются при выходе из функции?
Не уничтожаются. Но если убрать static, то все будет имено так, как он описал.
Armahem
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 7
07.02.2014, 20:45  [ТС]     Синтаксис. Использование & #7
Ясно, спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2014, 20:46     Синтаксис. Использование &
Еще ссылки по теме:

Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) C++
Поясните синтаксис - ( std::string& x: bar ) C++
Friend ostream& operator<<(ostream& stream, CArr& obj); C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
07.02.2014, 20:46     Синтаксис. Использование & #8
Цитата Сообщение от Armahem Посмотреть сообщение
Разве статические переменные уничтожаются при выходе из функции?
Невнимательно посмотрел, упустил волшебное слово static.
Yandex
Объявления
07.02.2014, 20:46     Синтаксис. Использование &
Ответ Создать тему
Опции темы

Текущее время: 09:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru