使用代理类限制隐式转换
来源:互联网 发布:qq无限加人软件 编辑:程序博客网 时间:2024/06/02 01:38
#include<iostream>using namespace std;//ImplictChange只有一个数据成员xclass ImplictChange{public: ImplictChange(int a) : x(a) {} //explicit可以防止隐式转换 friend bool operator==(const ImplictChange& rhs,const ImplictChange& lhs) {return(rhs.x == lhs.x);}private:int x;};//用代理类来限制隐式转换//原理:隐式转换只能被调用一次class NoImplictChange{public: //增加代理类class Proxy{public:Proxy(int a) : x(a) {}int getX() const{return(x);}private:int x;}; NoImplictChange(const Proxy& p) : pro(p) {} friend bool operator==(const NoImplictChange& rhs,const NoImplictChange& lhs) { return(rhs.pro.getX() == lhs.pro.getX()); }private: Proxy pro;};int main(){ ImplictChange a(1); if(1 == a) //此处就出现了隐式转换 { cout << 1 << endl; } NoImplictChange b(1); if(1 == b) { cout << 1 << endl; } return(0);}