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”

    错误!!!!!!

  • 相关阅读:
    5G扫盲
    geohash-net实现
    AI(一):概念与资讯
    AI(二):人脸识别
    geohash基本原理
    Hue
    Kylin(三): Saiku
    【FreeMarker】Spring MVC与FreeMarker整合(二)
    【FreeMarker】FreeMarker快速入门(一)
    【Linux】Jenkins以war包运行及开机启动配置(四)
  • 原文地址:https://www.cnblogs.com/cody1988/p/2175103.html
Copyright © 2011-2022 走看看