考虑代码,
#include <cstdio>
auto f(const auto &loc){
printf("Location: %p\n", &loc);
}
int main()
{
auto x {1};
auto y {2.3};
f(x);
f(y);
}
使用g++ -std=c++14 dummy.cpp
问题:
对于模板函数,在编译时明确提到类型(f<int>(2)
)。
函数f
如何接受不同类型的参数?
答案 0 :(得分:8)
在Concept Technical Specification&#39;功能&#39;
下auto f(const auto &loc){
printf("Location: %p\n", &loc);
}
实际上是template
(缩写的函数模板声明),相当于(但更短且更容易阅读)
template<typename T>
void f(const T&loc){
printf("Location: %p\n", &loc);
}
但请注意,使用auto
的表单不是任何C ++标准的一部分,而只是Concept Technical Specification的概念和约束,它看起来非常强大(但AFAIK只是由GNU的gcc版本≥6.1支持,带有选项-fconcepts
)。