【发布时间】: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)?
【问题讨论】:
-
它们显然不一样,或者不允许覆盖。这是模棱两可的,因为两者都可以应用,
int可以被视为int和const int&,具体取决于函数的签名。这里有多个匹配项。
标签: c++ parameters