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!

     

原文链接: https://www.cnblogs.com/lh03061238/p/12643122.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++中explicit关键字的使用

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/340250

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午12:30
下一篇 2023年3月2日 上午12:30

相关推荐