博客首页
  • 用户名
  • 密码
  • 验证码
  • 网校首页
  • 博客首页
  • 论坛首页
逍遥游!!
乘天地之正,而御六气之辩!
个人资料
_lzt_ 性别:男    所在地:北京市
2010年01月11日 14:20

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

日志分类:c | 阅读(429) | 收藏(0) | 评论(2) | 打印

最近读者 (登录后,您就出现在这里。这里登陆)


pplove_123
 评论读取中...
  • 发评论 (限500字以内)
  • 昵称:
  • 验证码:
  •  



以上网友发言只代表其个人观点,不代表中华会计网校博客的观点或立场。
array(2) { ["submit"]=> string(0) "" ["s"]=> string(0) "" } here