先看如下这个程序
#include
using namespace std;
template
class Var
{
public:
Var(){};
Var(Type src);
~Var(){};
void output() const;
private:
Type member;
};
template
Var::Var(Type src)
{
member = src;
}
template
void Var::output() const
{
cout<< member<< endl;
}
int main(int argc, char **argv)
{
Var i = 10; // (1)
Var c = 'a'; // (2)
Var Str = "Google"; // (3)
i.output();
c.output();
Str.output();
return 0;
}
编译报告(3)这行有错。
改成如下Var Str = (string)"Google"或Var Str = string("Google")就可以了。
为什么(1)和(2)就可以直接赋值,而(3)报错呢?
原因就是:编译器不会对模板函数作隐式转换。
阅读(1789) | 评论(0) | 转发(0) |