Звездочка в вашем примере привязывается к типу возврата и указывает, что функция возвращает указатель на экземпляр строки.
Если вы удалили звездочку, это означало бы, что вы возвращали экземпляр строки по значению.
Так звездочка означает, что тип является указателем на любой тип он подключен к, так int*
является типом, который является указателем на int
, в то время как int**
указатель, который является указателем на int
, и так на.
Чтобы получить доступ к экземпляру строки, возвращенному в качестве указателя, вы должны разыменовать его, либо добавив возвращаемое значение с помощью *
, либо получив доступ к элементам, используя «оператор стрелки» (->
). Так код:
string* str = buildPrompt();
cout << *str << endl;
cout << (*str).c_str() << endl;
cout << str->c_str() << endl;
будет выводить тот же текст в три раза, в первом примере мы derefence класса и вывести значение в нем, пути пропускания разыменованного указателя на перегруженном оператор operator<<
для string
на ostream
. Во втором примере мы сначала разыскиваем указатель и обращаемся к вызову функции-члена c_str
в этом экземпляре. Третий пример делает то же самое, но использует оператор «стрелка».
Помните, что указатель может быть нулевым, и в этом случае разыменование приведет к неприятностям. Поэтому вы всегда должны проверить, есть ли указатель nullptr
перед разыменованием его.
Да .... 'string' и' string * '- это не одно и то же. Вы должны учиться C++. – Rakete1111
@ Rakete1111 Я выучил C++ ... Но я не помню, как наставник говорил что-нибудь о звездочке после типа. – BoeNoe
http://www.cplusplus.com/doc/tutorial/pointers/ – OldProgrammer