Что значит передавать & переменную в функцию? Например, string & insert (size_t pos1, const string & str); - PullRequest
2 голосов
/ 17 июня 2010

Я понимаю, что передаем указатель и возвращаем указатель:

char * strcat ( char * destination, const char * source );

Вы передаете переменную, содержащую адрес, символу;возвращая то же самое.

Но что значит передавать что-то с помощью оператора ссылки?Или вернуть его?

string& insert ( size_t pos1, const string& str );

Я имею в виду, я понимаю, что на самом деле происходит, я просто не понимаю обозначения.Почему вместо этого это обозначение:

string * insert ( size_t pos1, const string * str ); //made up

Я предполагаю, что это как-то связано с передачей / возвратом экземпляра класса, но что?Этот синтаксис действителен;если нет, то почему нет, и если да, что это значит?

char & strcat ( char & destination, const char & source ); //made up

(все объявления функций, кроме двух последних созданных, взяты из http://www.cplusplus.com)

Ответы [ 3 ]

3 голосов
/ 17 июня 2010

Проще говоря, ссылка - это указатель, не говорящий вам, что это указатель.

Если вы напишите следующее в простом C:

void getpi (float *f)
{
*f = 3.14;
}

float v;
getpi(&v);

Вы можете написать следующее на C ++использование ссылок:

void getpi (float &f)
{
f = 3.14;
}

float v;
getpi(v);

У него есть дополнительное преимущество, заключающееся в том, что вы можете перейти от обычного аргумента по значению к аргументу по ссылке, не внося изменений в вызывающую функцию.Предположим, у вас есть это:

class X;   // A rather small class that can be easily copied
void doSomething (X x);

Но через некоторое время класс X становится действительно большим, и вы больше не хотите передавать его по значению.В простом C вы должны изменить аргумент на аргумент указателя и изменить всех вызывающих.В C ++ вы можете просто сделать это:

void doSomething (X &x);

И вам не нужно менять абонентов.

0 голосов
/ 17 июня 2010

Вот полезная статья о том, когда использовать ссылки вместо указателей (или указателей const): http://www.embedded.com/story/OEG20010311S0024

Использование ссылки вместо указателя const позволяет достичь некоторых из тех же результатов, но также гарантирует, чтообъект действителен, поскольку ссылкам могут быть назначены произвольные «значения».

0 голосов
/ 17 июня 2010

Это называется ссылкой.Указатели - это объекты, которые указывают на другие объекты.Ссылки, с другой стороны, являются просто способом ссылки на существующий объект.Ссылки являются центральной особенностью C ++.В C ++ faq гораздо больше информации: https://isocpp.org/wiki/faq/references

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...