【问题标题】:c++ template argument deducec++ 模板参数推导
【发布时间】:2021-06-16 12:55:22
【问题描述】:

Q1:

template  <typename  T> void print(const T &) {cout("INT &");}
template  <typename  T> void print( T  ) {cout("INT");}

int main() {
    int i = 10;
    print(i);
}

编译器说“错误:重载 'print(int&)' 的调用不明确”

为什么?

“const T &”和“T”是一样的吗?

第二季度:

template <typename T> void f( T){cout("F-T");};
template <typename T> void f( const T*){cout("F-T*");};
int main() {
    int ix = 43, *p=&ix;
    const int ci = 0, *p2 = &ci;
    f(p); // why result is "F-T"?
}

p是指针,non-const可以转换成const。

为什么 f(p) 选择 f(T)?

【问题讨论】:

标签: c++ parameters


【解决方案1】:

对于问题 1:两个重载都同样“好”,T 都推导出为 int。在没有“最佳”重载的情况下进行调用是错误的。你会得到同样的

void print(const int &) { std::cout << "const int &"; }
void print(int) { std::cout << "int"; }

对于问题 2:第一个重载,T 推导出为 int *,优于第二个,T 推导为 int

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-09
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多