隐藏转换 operator 与非operator都有隐藏

隐式类类型转换     有两种.构造的隐式和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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值