c++ - 自动占位符类型和显式模板类型在 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定义不匹配。

https://stackoverflow.com/questions/70610748/

相关文章:

python - 小列表的长排列

c - 如何跟踪全局变量重新定义问题的链接器问题

python - 如何阻止 Selenium 在执行期间关闭驱动程序?

r - 如何通过合并 csv 文件创建数据框,然后基于它创建 Shiny 的应用程序?

c++ - std::unordered_map 如何确定哈希表中特定键的位置?

kotlin - 为什么 Kotlin 不提示歧义?为什么要调用辅助构造函数?

r - 有没有一种方法可以将列添加到函数形式的数据框中

reactjs - 为什么箭头函数可以工作但常规函数不能 React JS

go - 我应该如何使用 protoc-gen-go-grpc?

r - 如何将多列连接成一列并删除重复项?