让我们假设我有这个代码:
class A {
public:
A(int y) { cout << y; }
};
int main() {
A a(1.5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
即使 1.5 是float,这段代码也能工作并返回 1。float被隐式转换为int。为什么不抛出异常?构造函数是否依赖于参数的数量或其类型?我在哪里可以阅读有关此内容的信息?
我有两个版本的程序。第一的:
template<class T>
void f(T i, T j) = delete;
template<>
void f(int i, int j) {
cout << i << j << endl;
};
int main()
{
f(1.5, 2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第二:
template<class T>
void f(T i, T j) = delete;
void f(int i, int j) {
cout << i << j << endl;
};
int main()
{
f(1.5, 2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一个版本不会编译,因为1.5它2有不同的类型。在我删除的第二个版本中,template<>因此1.5将转换为1并且程序将成功运行。那么,当我们 remove 时template<>,它仍然是模板特化,还是别的什么?除了隐式类型转换之外还有什么区别吗?有用吗?