Как мне преобразовать что-то из "string *" в "const string &" в C ++? - PullRequest
1 голос
/ 18 июня 2009

Например, если у меня есть следующее:

void foo(string* s)
{
    bar(s); // this line fails to compile, invalid init. error
}

void bar(const string& cs)
{
    // stuff happens here
}

Какие преобразования мне нужно сделать, чтобы звонок был успешным?

Ответы [ 3 ]

12 голосов
/ 18 июня 2009

Измените его на:

bar(*s);
4 голосов
/ 18 июня 2009
void foo(string* s)
{
    bar(*s);
}

s указывает на строку, а bar требует (ссылку на) строку, поэтому вам нужно указать bar на что s указывает. То, как вы пишете «на что s указывает», это *s.

2 голосов
/ 18 июня 2009

При преобразовании указателя на ссылку важно убедиться, что вы не пытаетесь преобразовать нулевой указатель. Компилятор должен позволить вам выполнить преобразование (потому что в общем случае он не может определить, является ли это допустимой ссылкой).

void foo(string* s)
{
    if(0 != s){
      bar(*s);
    }
}

Оператор * является обратным к оператору &. Чтобы преобразовать ссылку на указатель вашего использования & (адрес). Чтобы преобразовать указатель на ссылку, используйте * (содержимое).

...