Я столкнулся с ошибкой в моем коде, когда вызывалась неправильная перегруженная функция.
Проблема сводится к следующему:
void func(const int* const& ptr){
std::cout << "LValue reference\n";
}
void func(const int* const&& ptr){
std::cout << "RValue reference\n";
}
int main(){
const int* ptr;
func(ptr);
return 0;
}
Приведенный выше код работает, как и ожидалось,это печатает LValue reference
.Однако когда я изменяю const int* ptr
на int* ptr
, программа печатает RValue reference
.Это странно для меня, так как я передаю это подтвержденное LValue.Это приводит меня к мысли, что происходит некое неявное преобразование, которое превращает его в RValue.Я изучил его с помощью компилятора godbolt, который, на первый взгляд, подтвердил бы мои подозрения, но я ничего не знаю о сборке, поэтому не могу сказать наверняка.
Итак, вопрос в том, чтоздесь происходит?