gpt4 book ai didi

c++ - 没有明确使用类型的模板函数,奇怪的重载排名

转载 作者:搜寻专家 更新时间:2023-10-31 02:19:11 25 4
gpt4 key购买 nike

我无法为我的问题想出更好的标题。基本上它恢复到以下代码:

#include <iostream>

template<typename T> // generic
void f(T)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}

template<typename T>
void f(int)
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}

int main()
{
f(42); // calls generic f(T)
f<int>(42); // calls f(int)
f<int>(42.2); // also calls f(int)
}

Live on Coliru

我的问题:

  1. 第二个重载在语法上是否正确?该类型未在其中的任何地方使用。看起来没问题,因为程序可以同时使用 g++ 和 clang++ 进行编译。
  2. 编译器如何选择调用哪个重载?我明白为什么 f(42)调用通用 f(T) ,但是为什么 f<int>(42)f<int>(42.2)导致调用第二个重载?

最佳答案

  1. 是的。只是不能从论证中推导出T。没关系,因为您已经在 (2) 和 (3) 中提供了模板参数。

  2. 如果您在调用它时不指定 T,它将选择推导版本 (1)(示例 1)。如果您在调用站点指定 T,它不会尝试推断 T,因为您已经告诉它 T 是什么(示例 2 和 3)。

关于c++ - 没有明确使用类型的模板函数,奇怪的重载排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33833490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com