c++11之后增加了explicit运算符,防止隐式转换
常见的用法是explicit放在构造函数之前,防止隐式构造,这里不多介绍。
下面介绍另外一中用途
class IntRef {
public:
IntRef(int i):value(i){}
explicit operator int() const {
return value;
}
// IntRef& operator = (int i) {
// this->value = i;
// return *this;
// }
private:
int value;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
IntRef c = 123;
// int d = c; //隐式转换
// std::cout << d << std::endl;
int d = static_cast<int>(c); //显式
int e = int(c); //显式
std::cout << d << std::endl;
std::cout << e << std::endl;
return a.exec();
}
如果使用explicit之后,int d = c; 直接赋值编译会报错,必须使用显示转换才可以。