前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++中的explicit关键字

C++中的explicit关键字

作者头像
felixzhao
发布2021-09-06 10:09:10
5760
发布2021-09-06 10:09:10
举报
文章被收录于专栏:null的专栏

1. explicit关键字

explicit的中文含义是显示的,在C++中主要用于防止隐式转换的发生。那么什么是隐式转换,以如下的代码为例

代码语言:javascript
复制
#include <iostream>
using namespace std;

class Demo {
    public:
        Demo() {}
        Demo(int a) {
            _value1 = a;
        }
        int get_value() {
            return _value1;
        }
    private:
        int _value1;
};

int main() {
    Demo demo;
    demo = 2;  // 隐式转换
    cout << "_value1: " << demo.get_value() << endl;
    return 0;
}

上述代码的输出结果是:_value1: 2,在main函数中,demo = 2就发生了隐式转换,用户类的初始化。如果加上explicit关键字又会是怎样,在Demo(int a)前面加上explicit,结果在编译的时候就显示“no known conversion for argument 1 from ‘int’ to ‘const Demo&’”。

2. 构造函数

C++中的explicit关键字只能用于修饰只有一个参数或者多参数情况下,除了第一个参数外的其他参数都是默认值的构造函数中,对于无参或者除上述之外的多参数构造函数是无效的,如:

代码语言:javascript
复制
class Demo {
    public:
        explicit Demo() {};  // 无效
        explicit Demo(int a);  // 有效
        explicit Demo(int a, int b = 0);  // 有效
        explicit Demo(int a, int b);  // 无效

    private:
        int _value1;
        int _value2;
};

3. 总结

C++中explicit关键字可以防止隐式转换的发生,在使用时注意如下几点:

  1. 只能用于修饰只有一个参数的类构造函数,或者修饰多参数情况下除第一个参数外其余参数都是默认值的构造函数中;
  2. 无参构造函数或者多参数构造函数总是显示调用;
  3. 类构造函数默认情况下都是显示调用;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. explicit关键字
  • 2. 构造函数
  • 3. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档