explicit和implicit关键字

来源:互联网 发布:今天双11网络怎么了 编辑:程序博客网 时间:2024/05/20 21:46

explicit和implicit关键字(转)

换了工作,不使用.net了,改用c++,很多c++基础知识本就不熟,再加上这么长时间没碰过,基本忘光了。

C#中有explicit和implicit两个关键字,但c++中只有explicit一个关键字。
而且explicit在c++中使用范围还很窄,只能用来修饰类的构造函数。而且还只是在类的构造函数只有一个参数或有多个参数但仅有一个参数没有默认值的情况下explicit才有效。为什么要有这些限制呢?!因为explicit是来限制类的隐式转换,限制不必要的错误发生。如果有构造函数没有参数或多个参数没有默认值,本来就是不能进行隐式转换的。
看这个例子。
class C2 {
public:
int i;
explicit C2(int i ) // an explicit constructor
{ }
};
void f2(C2)
{
}
void g(int i)
{
f2(i); // C2558 //这里编译不通过,因为i不能隐式转换成C2,去掉explicit可以编译通过。
// f2(C2(i)); //不去掉explicit,用下面这种形式可以通过
}

关于c++的explicit关键字网上文章很多。不多说了。
原创粉丝点击