c++ - 自动占位符类型和显式模板类型在 C++20 中是否等效?

标签 c++ templates c++20

自动占位符类型和显式定义的模板类型参数是否完全等效?

我读过规范指出“占位符类型说明符指定一个占位符类型,稍后将通过从初始化程序中推导来替换它。”

(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;
}

最佳答案

它们在功能上是等价的,但重要的是要注意标准并未声明它们实际上是等价的。也就是说,f1f2 实际上在所有方面都是一样的。但你永远不能这样做:

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/

相关文章:

c++ - 为什么 std::equality_comparable 不适用于 std::vector

c++ - 来自 IWbemClassObject::Get 的未知异常

c++ - 如何编译openCV保证单线程?

c++ - 当 VISUAL_ID 和 screen->root_visual 不相等时,glXCreateWindow 不起作用

c++ - 编译时枚举字符串整数对

c++ - 两阶段查找 - 需要解释

c++ - 返回的std::function保留在std::variant的映射中

c++ - 翻译单元之间共享的 Lambda 变量

c++ - 调用模板化成员的模板化方法

成员函数的 C++ 模板特化