C++关键字explicit有什么作用?

C++关键字explicit作用分析:

用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示,什么又是隐式的呢?
如果C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。

/*************************************************************************
	> File Name: 8.3.explicitfoo.cpp
	> Author: 
	> Mail: 
	> Created Time: Mon Jul 26 18:02:25 2021
 ************************************************************************/
#include<stdio.h>
#include<iostream>
using namespace std;

class Myclass {
public:
    explicit Myclass(int num) : m_num(num) {
        printf("constructor num = %d\n", num);
    }
    // explicit: 
    // 1> 只能在类的内部声明使用,而不能在类的外部声明;
    // 2> 只能修饰一个参数的构造函数。对于多个参数的构造函数无任何意义;
    // 3> 声明了之后,就不允许隐式转换!
    
    // explicit 修饰多个参数构造函数无任何意义!
    explicit Myclass(int i, float f, double d) {
        printf("constructor i = %d, f = %f, d = %lf\n", i, f, d);
    }
private:
    int m_num;
};

int main(void) {
    Myclass obj1 = (Myclass)100.123;
    Myclass obj2(int(200));
    Myclass obj3(100.123, 200.123f, 300.123);
    Myclass obj4('a', 200.123f, 300.123);
    return 0;
}

代码截图:

运行结果:

posted @ 2021-07-26 22:15  skyuz  阅读(261)  评论(0编辑  收藏  举报