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”

    错误!!!!!!

  • 相关阅读:
    OpenJDK与HashMap
    跨终端Web之Hybrid App
    Java日志性能
    openstack
    Hadoop下各技术应用场景
    股票基金看哪些书
    Java内存模型的历史变迁
    浅谈JS DDoS攻击原理与防御
    清除Windows 10的文件夹浏览痕迹
    linux删除文件后没有释放空间
  • 原文地址:https://www.cnblogs.com/cody1988/p/2175103.html
Copyright © 2011-2022 走看看