MST

星途 面试题库

面试题:C++ 模板函数重载解析

假设有如下C++ 模板函数定义: ```cpp template <typename T> void func(T t) { std::cout << "general template: " << t << std::endl; } template <typename T> void func(T* t) { std::cout << "pointer template: " << *t << std::endl; } ``` 如果调用`func(&10)`,会调用哪个函数?请解释原因。
34.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 调用的函数:会调用 template <typename T> void func(T* t) 这个函数。
  2. 原因
    • 当调用 func(&10) 时,&10 是一个指向 int 类型常量 10 的指针。
    • C++ 模板函数匹配规则中,会优先选择更特化的模板。template <typename T> void func(T* t) 专门针对指针类型进行了特化,相比通用模板 template <typename T> void func(T t),它与传入的指针参数 &10 匹配度更高。所以编译器会选择这个针对指针类型的特化模板函数进行调用。