• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++中explicit的用法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
在C++中,explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换,只能以显示的方式进行类型转换。
#include <iostream>
using namespace  std;

class A
{
public:

     explicit A(int a)
    {
        cout<<"创建类成功了!"<<endl;

    
    }
    
    

};
int main()
{

    A a=10;
    return 0;
}
上面的代码编译不成功,原因是当显式地定义了一个带一个参数的构造函数( 带explicit),必须要显示地调用构造函数,

A a(10);

如果不加 explicit的话

A a=10;

实际的转换过程如下:
相当于直接调用A(10);

(1explicit
explicit 只能用于类内部的构造函数声明上。
explicit 作用于单个参数的构造函数或者只有零个或一个没有默认值得多个参数的构造函数。

2)何时用explicit

当我们不希望自动类型转换的时候用,其实标准库好多构造函数都是explicit的

比如说vector <int> ivec(10);  //这种定义看起来一目了然

不能写成vector <int> ivec=10//此种定义让程序员感到疑惑
3)何时不用explicit

当我们需要隐式转换的时候

比如说String类的一个构造函数

String(const char*);

 

定义成这样的好处,在需要隐式转化的时候编译器会自动地帮我们转换,标准库里面的String就是一个好的证明。

具体来说:

 

我们可以这样String str="helloworld";//直接调用构造函数

 

String str="hello"+str+"world";

 

调用重载的+操作符号,此过程相当于:
String temp("hello"); //调用构造函数

String str=temp+str;

String t("world");//调用构造函数

String str=str+t;

明白隐式转换在我们自己写类的时候,尤其是些操纵内存的类的时候很有用。

 转载自:http://blog.csdn.net/acdnjjjdjkdckjj/article/details/5644573

 

class Circle
{
public:
    explicit Circle(double r) : R(r) {}
    explicit Circle(int x, int y = 0) : X(x), Y(y) {}
    explicit Circle(const Circle& c) : R(c.R), X(c.X), Y(c.Y) {}
private:
    double R;
    int    X;
    int    Y;
};

int _tmain(int argc, _TCHAR* argv[])
{
//一下3句,都会报错
    //Circle A = 1.23; 
    //Circle B = 123;
    //Circle C = A;
    
//只能用显示的方式调用了
//未给拷贝构造函数加explicit之前可以这样
         Circle A = Circle(1.23);
        Circle B = Circle(123);
        Circle C = A;

//给拷贝构造函数加了explicit后只能这样了
         Circle A(1.23);
        Circle B(123);
        Circle C(A);
    return 0;
}
转载自:http://blog.csdn.net/just_a_beginning/article/details/4341999

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#连接MySQL数据库发布时间:2022-07-14
下一篇:
C#dll作为文件资源嵌入到Resource发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap