Возврат T (t) с помощью T=int

#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 Это зависит от того, как вы об этом думаете, на самом деле он создает ссылку и возвращает. Хотя вы также можете думать, что это просто привязка к ссылке.