2015-03-30 6 views
0

Я работаю с библиотекой, которую я не могу изменить, и была поставлена ​​задача заполнить библиотеку.Const Ref to const Pointer

Хотя я выполнил задание, и он работает, я действительно не понимаю, почему он работает, и должен ли он делать.

У меня есть функция в CPP файл

void Foo (const String &someName) 
{ 
    OtherFoo (&someName) 
} 

где Foo передает ссылку на константную строку и OtherFoo требует указателя на константные строки, которые будет передан ему.

Так в основном исх является const string& и должно быть передано в OtherFoo как константный указатель (const & к const *)

Это то, что я сделал хорошо? (передавая адрес ref функции, для которой требуется указатель на константную строку)

Есть ли какие-либо негативы в том, как я прошел аргумент? Может ли кто-нибудь объяснить, почему это работает?

Большое спасибо

+0

(Что касается словаря, 'const foo *' является указателем на const, а не константным указателем (это будет 'foo * const'),' const foo & 'является ссылкой на const . Делает вещи менее двусмысленными.) – Mat

+0

Спасибо - переформулировали для константной корректности. Пожалуйста, отредактируйте, если вы увидите больше. – unknownSPY

+0

Помните, что 'Foo' может быть вызван с временным объектом, а время жизни временного будет являться вызовом' Foo'. Если 'OtherFoo' хранит указатель для дальнейшего использования где-то, и это использование происходит после завершения Foo, указатель укажет на мертвый объект. – pmr

ответ

2

Да, это правильный способ сделать это. В самом деле, исходя из адреса ссылочной выписки фактически the address of the referent.

В этом случае тип выражения &someName фактически равен const String *.

Будьте осторожны, чтобы не смешивать консистенцию указателя и константы указателя. В этом случае, когда вы говорите «const pointer», это фактически указатель на const, который не то же самое.

+0

Спасибо - Я отредактировал для const correctness. если вы видите любые другие двусмысленные заявления, пожалуйста, не стесняйтесь их редактировать. – unknownSPY

Смежные вопросы