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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Armahem
0 / 0 / 0
Регистрация: 07.02.2014
Сообщений: 7
#1

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

07.02.2014, 19:19. Просмотров 268. Ответов 7
Метки нет (Все метки)

Скажите, пожалуйста, чем отличается
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     Синтаксис. Использование &
Посмотрите здесь:

Поясните синтаксис - ( std::string& x: bar ) - C++
Наткнулся здесь на использование двоеточия для какого-то рода инициализации ссылки, но не понимаю ни синтаксиса, ни механизма работы: ...

нестандартный синтаксис используйте "&", чтобы создать указатель на член - C++
Здравствуйте,начал изучать классы и вот такая фигня.Кому не сложно,помогите исправить #include "RECURSION_ONE.h" int...

Использование *& - C++
Помогите пожалуйста! На форуме не нашёл ответа.. объясните следующую строку void func1(class1*&) class class2 { class2(); ...

условие if (x && y && z ) - C++
День добрый. подскажите что не так: if(norcub() && nevk() && norok()) { cout<<"Условие не выполнено.\n"; count=30; } // эти 3...

Undefined reference to 'My_lab2::serialize_child(My_lab2::My_stack&,boost::interpro cess::file_lock&)') - C++
Компилирую test: g++ test.cpp -L. -lwrk -lboost_serialization -o programwrk -std=c++0x Так же компилирую libwrk до компиляции...

C++ 11 конструктор переноса && - C++
Кто-нибудь может мне пояснить или дать ссылку на информацию о rvalue reference на русском языке, а то на английском что-то не всё могу...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 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
6917 / 4110 / 939
Регистрация: 30.01.2014
Сообщений: 6,905
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     Синтаксис. Использование &
Еще ссылки по теме:

функции && строки - C++
ребята,пожалуйста,помогите.В понедельник практику сдавать,а эти задачи НЕМОГУ. 1. Написать процедуру для суммирования матриц. С ее...

FindFirstFile&&FindNextFile - C++
Работаю в Visual Studio 2010. Есть такой код: void print_diffs() { WIN32_FIND_DATA fd; HANDLE Handle; ...

Что значат && и || - C++
Вроде бы результат кода один и тот же первый код #include &lt;stdio.h&gt; #define MAX_STRING_SIZE 20 int main() { FILE *pFile;...

Move конструктор && - C++
Никак не могу понять, что же он делает. Вроде как пишут, что он даже предпочтительнее, чем всякие const MyType&amp; var в качестве параметров в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru