栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ explict 关键字

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ explict 关键字

        C++语言中,如果类的构造函数只有一个参数,那么默认情况下存在一种隐式转换,新标准增加了explicit关键字来,来限制这种隐式转换。

        另外地,如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的, 所以explicit关键字也就无效了。但是当除了第一个参数以外的其他参数都有默认值的时候, explicit关键字依然有效, 此时, 当调用构造函数时只传入一个参数, 等效于只有一个参数的类构造函数。

默认使用隐式转换

class Func {
public:
    Func();  // 空构造函数
    Func(double a); // 含一个参数的构造函数
    Func(int a, int b); // 含两个参数的构造函数
    Func(int a, double b = 1.2);  // 带有默认初始值的构造函数
    ~Func();

};

// 调用
Func v1(0.1);  // 直接调用含一个参数的构造函数
Func v2 = 0.2;  // 也是调用含有一个参数的构造函数,但是包含一次隐式转换
Func v3(2, 3);  
Func v3 = 2;  // 隐式转换,调用带有默认初始值的构造函数Func(int a, double b = 1.2)

使用explicit关键字,限制隐式转换

class Func {
public:
    Func() {}  // 空构造函数
    explicit Func(double a); // 该构造函数无法进行隐式类类型转换
    explicit Func(int a, int b);  // 含有两个参数,explicit对其无效,构造函数本身也是不能隐式转换的
    explicit Func(int a, double b = 1.2);  // 该构造函数无法进行隐式类类型转换
    ~Func() {}

};


// 调用
Func v1(0.1);  // 正确
Func v2 = 0.2;  // 错误,不能进行隐式类类型转换
Func v3(2, 3);  // 正确
Func v4 = 2;  // 错误,不能进行隐式类类型转换

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1030076.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号