#c #c 11
#c #c 11
Вопрос:
template<typename T>
T foo(Tamp;amp; t) {
return T(t);
}
int main() {
int x;
foo(x);
}
Итак, я знаю, что T=intamp; здесь, но я не понимаю, что происходит в строке возврата, чтобы сделать это ошибкой. Может кто-нибудь объяснить, как?
Ответ №1:
T(t)
выполняет явное преобразование (функциональное приведение), когда T
есть intamp;
, поскольку в результате T(t)
создается привязка к t
ссылке, а затем возвращается в качестве возвращаемого значения (возвращаемый тип intamp;
тоже).
Комментарии:
1. Спасибо! Это вполне понятно. Мне было трудно понять, так как я ожидал, что он что-то построит.
2. @nononope Это зависит от того, как вы об этом думаете, на самом деле он создает ссылку и возвращает. Хотя вы также можете думать, что это просто привязка к ссылке.