zoukankan      html  css  js  c++  java
  • C/C++语言的点滴(二)之C++关键字explicit

    作用:防止带有一个参数的构造函数在默认情况下的隐式转换

    例子:

    #include <iostream>
    #include <cstdlib>
    using namespace std;

    class CPerson
    {
    public:
     int age;
    public:
     CPerson(int age){this->age = age;}
    };

    void main()
    {
     CPerson p1(10);    -----1
     CPerson p2=20;    -----2

     cout<<p1.age<<endl;
     cout<<p2.age<<endl;

     system("pause");
    }

    1出为正常的申明一个C++类对象的方式,再看2处声明的对象p2,正常吗?你不能说它不正常因为它在上面的情况下运行的很正常。

    这里发生了隐形的转换,要想避免这种装换,就要在构造函数前加上explicit关键字。

    #include <iostream>
    #include <cstdlib>
    using namespace std;

    class CPerson
    {
    public:
     int age;
    public:
     //explicit CPerson(int age){this->age = age;}
     explicit CPerson(int age);
    };

    CPerson::CPerson(int age)
    {
     this->age=age;
    }

    void main()
    {
     CPerson p1(10);
     CPerson p2=20;

     cout<<p1.age<<endl;
     cout<<p2.age<<endl;

     system("pause");
    }

    这时,编译会出现

    1>e:\common\cpp\explicit\explicit\main.cpp(22): error C2440: “初始化”: 无法从“int”转换为“CPerson”
    1>          class“CPerson”的构造函数声明为“explicit”

    错误!!!!!!

  • 相关阅读:
    树上莫队学习笔记
    点分治学习笔记
    7.11总结
    线段树合并学习笔记
    7.10总结
    bzoj1201: [HNOI2005]数三角形----递推+bitset
    bitset(01串)优化
    Tarjan系列1
    bsgs(Baby Steps Giant Steps)算法
    [SD2015]序列统计——solution
  • 原文地址:https://www.cnblogs.com/cody1988/p/2175103.html
Copyright © 2011-2022 走看看