自动占位符类型和显式定义的模板类型参数是否完全等效?
我读过规范指出“占位符类型说明符指定一个占位符类型,稍后将通过从初始化程序中推导来替换它。”
(9.2.8.5 占位符类型说明符 http://eel.is/c++draft/dcl.spec.auto#:auto )
那么就实例化、const 类型、引用类型等而言,以下是否等价?
void f1(auto param) {
using T = decltype(param);
T t1;
}
template <class T> void f2(T param ) {
T t1;
}
最佳答案
它们在功能上是等价的,但重要的是要注意标准并未声明它们实际上是等价的。也就是说,f1
和 f2
实际上在所有方面都是一样的。但你永远不能这样做:
void f1(auto); //declaration of a template.
template<typename T>
void f1(T t) //definition of a template.
{...}
f1
的声明与 f1
的定义不匹配。
关于c++ - 自动占位符类型和显式模板类型在 C++20 中是否等效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70610748/