Как работают reference_wrapper и std:: ref?
Я пытаюсь понять, как работает std:: ref.
#include <functional>
#include <iostream>
template <class C>
void func(C c){
c += 1;
}
int main(){
int x{3};
std::cout << x << std::endl;
func(x);
std::cout << x << std::endl;
func(std::ref(x));
std::cout << x << std::endl;
}
Output : 3 3 4
В приведенном выше коде, я думаю, что параметр шаблона C
для третьего вызова функции создается как std::reference_wrapper<int>
.
Читая ссылку,
Я заметил, что в std::reference_wrapper<int>
нет оператора +=
.
Затем, как c += 1;
допустимо?
Ответы
Ответ 1
Как действует c += 1;
?
Потому что reference_wrapper<int>
неявно конвертируется в int&
через свой оператор преобразования; и неявные преобразования рассматриваются для операндов, если нет подходящей перегрузки для самого типа операнда.
Ответ 2
std::reference_wrapper<T>
имеет оператор преобразования до T&
. Это означает, что std:: reference_wrapper может быть неявно преобразован в int&
в вашем примере.