1 隐式类类型转换 有两种.构造的隐式和operator的隐式. 最大区别构造跟operator是相反的,构造是用别的类型变成当前类类型,而operator是当前类变成别一类型.而模板又是特别.再在下面有解释
http://blog.csdn.net/honpey/article/details/9018429
class A
{
A(B b);//单个实参的构造函数
func(A a);
}
.....
A a;
B b;
a.func(b);//func函数本应该接受A类型的实参,但是由于特殊构造函数的存在,所以B类型的参数b借助这个特殊的构造函数转化为A类型对象,完成转换。所以这条语句是正确的
operator 隐式
http://blog.csdn.net/honpey/article/details/9067783
class A {
public:
......
operator int(){return num;}; // 在需要情况下, A对象可以转成int类型对象。
......
int num;
;};
根本原因在于隐式转换不参与模板实参的推导。
http://www.myexception.cn/cpp/340903.html
2
函数参数的自动隐式类类型转换只能一次 (是挺好的一个例子,并可展示了函数(类模板()) 不会去推导类模板 )
#include<iostream>
#include<string>
using namespace std;
class TEST {
public:
TEST(){
cout<<"TEST()"<<endl;
}
TEST(string b){
cout<<"TEST(string) "<<endl;
}
TEST(const TEST &t){
cout<<"cpy_test"<<endl;
}
};
int f(const TEST& b){
return 0;
}
int f1( TEST b){
return 0;
}
int main()
{
TEST temp= TEST();
TEST t="sdfda"; //gcc下无法通过编译,改为string(“sdfda”),就可以了
//f("1");//gcc下无法通过编译,改为string(“1”)就可以了 , f(string("1"))
//f(string("1"));
while(1){}
return 0;
}