2013-09-28 3 views
2

Давайте предположим, что этот код:Проходя через ссылки параметра в функции C++

void function(double &f){ 

// doing w/e here 

} 

затем в главной функции:

float v; 

function(&v); 

Мой компилятор говорит, что это не правильно, покупать я не почему бы и нет.

На эту же тему:

void function(float *&f){ 

// doing w/e here 

} 

затем в главной функции:

float *v; 

function(v+5); 

Это тоже неверно по какой-то причине, что я не получаю ни.

Так что мой вопрос: почему эти неправильные звонки?

ответ

4

Первый пример неверен, потому что &v является указателем на поплавок. Функция ожидает ссылки на double. Указатель на float не является ссылкой на double. Они несовместимы.

Второй пример неверен, потому что v+5 является временным. Вы не можете передавать ссылку на неконстантную временную.

+0

Замечание - даже если вы замените 'float' на' double', указатель на 'double' не является ссылкой на' double'. На самом деле, это тесно связанные понятия - ссылка также называется указателем саморазрушения, но C++ рассматривает их как разные типы с различным поведением. Чтобы указать тип указателя для параметра, вы используете 'double * f', а не' double & f'. Чтобы передать ссылку, вам не нужен оператор для преобразования в ссылку, вы просто используете 'function (v)'. – Steve314

+0

Один из способов думать об этом - если вы используете '&' в качестве оператора, он дает вам указатель. Если вы используете '&' в типе, он использует указатель за кулисами, но вы не имеете дело непосредственно с указателем. – Steve314

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