C++中explicit关键字的使用

原文:https://www.jianshu.com/p/f05073044daf

详细参考:https://blog.csdn.net/l2563898960/article/details/97769569

 

1.explicit函数介绍

  • 作用:explicit构造函数是用来防止隐式转换的
  • 实例1如下
    复制代码
        #include <iostream>
    
        using namespace std;
    
        // explicit函数的介绍!!!
    
        // explicit函数的作用:explicit构造函数是用来防止隐式转换的
        class Test1{
            public:
                Test1(int n){  // 普通隐式的构造函数
                    num = n;
                }
            private:
                int num;
        };
    
        class Test2{
            public:
                explicit Test2(int n){   //explicit(显式)构造函数
                    num = n;
                }
            private:
                int num;
        };
    
        int main(){
            Test1 t1 = 12;  // 隐式调用其构造函数,成功
            // Test2 t2 = 12;  编译错误,不能隐式调用其构造函数
            Test2 t3(12);  //  显式调用成功
            return 0;
        }
    复制代码

     

    • Test1的构造函数带一个int型的参数,会隐式转换成调用Test1的这个构造函数。而Test2的构造函数被声明为explicit(显式),这表示不能通过隐式转换来调用这个构造函数,因此Test2 t2 = 12会出现编译错误。普通构造函数能够被隐式调用,而explicit构造函数只能被显式调用。
    • 实例2如下

    复制代码
        class Test{
            public:
                Test():a(0){
                    cout << "void\n";
                }
                explicit Test(int i):a(i){
                    cout << "int\n";
                }
                Test(short s):a(s){
                    cout << "short\n";
                }
                Test & operator=(int n){
                    a = n;
                    cout << "operator = ";
                }
            private:
                int a;
        };
        int main(){
            int n;
            Test a = n;
            return 0;
        }
    复制代码

    A:接受一个参数的构造函数允许使用赋值语句隐式调用来初始化对象; 而explicit构造函数只能被显式调用!所以,输出的是short!

     

posted on   lh03061238  阅读(694)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示