zoukankan      html  css  js  c++  java
  • c++ 隐式转换(explicit与转换构造函数)

    由转换造函数进行的类型转换称为隐式转换,由类型转换运算符进行的转换称为显式转换

    当一个构造函数只有一个参数,而且该参数又不是本类的const引用时,这种构造函数称为转换构造函数,即转换构造函数为单参构造函数的一种。

    只有类的转换构造函数和类型转换操作符函数才可以被声明为explicit,当explicit用于类型转换操作符运算时,意味着禁止所有显式的类型转换

    explicit不可以被继承,因为子类和父类的构造函数之间是调用关系,而非继承。

    单参构造函数的功能:

    在c++中,单参构造函数(或者除了第一个参数外其余参数都有默认值的多参数构造函数)承担了两个角色:一是构造器,二是默认且隐含的类型转换操作符(转换构造函数

    当我们在写 YYY = XXX 这样的代码,且XXX的类型恰好是YYY单参构造器的参数类型,这时候编译器就自动调用这个构造器,创建一个YYY对象。

    如果我们不想使用这个默认且隐含的类型转换功能,就需要在类的单参构造器前面加上 explicit 修饰指定这个构造器只能被显示调用,不能作为类型转换操作符被隐含地使用。

    示例:

    class Integer1 {
    public:
        int data;
        Integer1(int data) { this->data = data; }
    };
    
    class Integer2 {
    public:
        int data;
        explicit Integer2(int data) { this->data = data; }
    };
    
    int main()
    {
        Integer1 v1 = 3; // 隐式地调用其构造函数,success
        Integer2 v2 = 3; // 编译错误,不能隐式地调用其构造函数
        Integer2 v3(2); // 显示调用构造函数,sucess
        return 0;
    }
  • 相关阅读:
    持续集成(Continuous Integration),
    python的几个有趣点
    C++语言发展历史 & 基础知识
    [C++] Windows下的socket编程(这是一个简单的TCP/IP例子)
    office app 代码简析之 task pane app
    佳言玩具
    数据的图形可视化[R语言结果GML引发出来的调查]
    收藏的一系列教程帖子,很适合有一定基础,想要进阶的同学
    各种排序算法总结
    三层架构+存储过程实现分页
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13289171.html
Copyright © 2011-2022 走看看