<b>c++中explicit关键字的含义和用法</b>[VC/C++编程]
本文“<b>c++中explicit关键字的含义和用法</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
c++中的explicit关键字用来修饰类的构造函数,表明该构造函数是显式的, 既然有"显式"那么必定就有"隐式",那么什么是显示而什 么又是隐式的呢?
假如c++类的构造函数有一个参数,那么在编译的时刻 就会有一个缺省的转换操作:将该构造函数对应数据范例的数据转换为该类对象 ,以下面所示:
class MyClass
{
public:
MyClass( int num );
}
....
MyClass obj = 10; //ok,convert int to MyClass
在上面的代码中编译器自动将整型转换为MyClass类对象,实际上平等于下面的操 作:
MyClass temp(10);
MyClass obj = temp;
上面的 全部的操作便是所谓的"隐式转换".
假如要避免这种自动转换 的功效,我们该怎么做呢?嘿嘿这就是关键字explicit的作用了,将类的构造函 数声明为"显示",也就是在声明构造函数的时刻 前面增添上explicit 便可,这样便可以避免这种自动的转换操作,假如我们改正上面的MyClass类的构 造函数为显示的,那么下面的代码就不可以编 译通过了,以下所示:
class MyClass
{
public:
explicit MyClass( int num );
}
....
MyClass obj = 10; //err,can't non-explict convert
class isbn_mismatch:public std::logic_error{
public:
explicit isbn_missmatch(const std::string &s):std:logic_error(s){}
isbn_mismatch(const std::string &s,const std::string &lhs,const std::string &rhs):
std::logic_error(s),left(lhs),right(rhs){}
const std::string left,right;
virtual ~isbn_mismatch() throw(){}
};
Sales_item& operator+(const Sales_item &lhs,const Sales_item rhs)
{
if(!lhs.same_isbn(rhs))
throw isbn_mismatch("isbn missmatch",lhs.book(),rhs.book());
Sales_item ret(lhs);
ret+rhs;
return ret;
}
Sales_item item1,item2,sum;
while(cin>>item1>>item2)
{
try{
sun=item1+item2;
}catch(const isbn_mismatch &e)
{
cerr<<e.what()<<"left isbn is:"<<e.left<<"right isbn is:"<<e.right<<endl;
}
}
以上是“<b>c++中explicit关键字的含义和用法</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |