Рассмотрим этот код,
struct A {};
struct B { B(const A&) {} };
void f(B)
{
cout << "f()"<
Этот компилируется нормально , работает нормально. Но если я изменю f (B)
на f (B &)
, он не будет компилироваться . Если я напишу f (const B &)
, он снова компилируется нормально , работает нормально. Почему причина и обоснование?
Резюме:
void f(B); //okay
void f(B&); //error
void f(const B&); //okay
Я хотел бы услышать причины, обоснование и ссылки из спецификации языка для каждого из этих случаев. Конечно, сами сигнатуры функций не неверны. Скорее A
неявно преобразуется в B
и const B &
, но не в B &
, и это вызывает ошибку компиляции.