自动参数如何在内部工作?
How do auto arguments work internally?
考虑代码,
#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
如何接受不同类型的参数?
下Concept Technical Specification下'function'
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
).
考虑代码,
#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
如何接受不同类型的参数?
下Concept Technical Specification下'function'
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
).