【发布时间】:2021-04-01 19:07:14
【问题描述】:
我写了一个看起来像这样的函数:
auto fn(auto x) {
return x;
}
我用不同的参数调用了它两次:
std::cout << fn(3124) << std::endl;
std::cout << fn("hello world") << std::endl;
它工作正常,但我不明白为什么 - 我认为编译器推断出函数的常量返回类型 - int(由于第一次调用 - fn(3124))。 看起来编译时生成的函数看起来像
template<typename T>;
T fn(T x) {
return x;
}
我不知道为什么。 请解释一下。
【问题讨论】:
-
函数模板的不同特化应考虑不同的函数。
-
要记住的有用的事情:你写的每个
auto都是一个独特的auto。您的fn中的两个auto是完全独立的。auto fn(auto x, auto y) { return x+ y;}也是如此 - 这可以获取两种不同类型的对象并返回第三种不同类型的对象。