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”

    错误!!!!!!

  • 相关阅读:
    1.1 Recruitment 1.1.4 Sample Test(II)
    1.1 Recruitment 1.1.4 Sample Test(I)
    微信登录接口
    谷歌浏览器保留页面跳转前的请求
    积分墙项目接口文档
    @SneakyThrows
    security中使用单元测试
    Prometheus监控系统
    大数据-shell-脚本入门-开头格式、运行方式、多命令处理
    大数据-shell-概述
  • 原文地址:https://www.cnblogs.com/cody1988/p/2175103.html
Copyright © 2011-2022 走看看