zoukankan      html  css  js  c++  java
  • c++中的隐式对话和隐式关键词

    这是一个简单的类的声明和调用

    #include<iostream>
    #include<string>
    
    class Entity
    {
    private:
        std::string m_Name;
        int m_Age;
    public:
        Entity(const std::string& name)
            :m_Name(name),m_Age(-1){}
        Entity(int age)
            :m_Name("Unknow"),m_Age(age){}
    };
    
    int main()
    {
        Entity a("Wangtn");//Entity a=Entity("Wangtn");
        Entity b(26);//Entity b=Entity(26);
        std::cin.get();
    }

    如果我们使用隐式方式的话,也可以这样来初始化它

    int main()
    {
        Entity c = (const std::string&)"Wangtn";
        Entity d = 26;
        std::cin.get();
    }

    如果有这样一个函数,你可以在主函数中如下调用它

    void Print(const Entity& entity)
    {
        //print something
    }
    int main()
    {
        Print(22);
        Print((const std::string&)"Wangtn");
    
        std::cin.get();
    }

    直接写Print("Wangtn");的话会报错,因为string要在命名空间中使用,编译器会默认wangtn是char字符串,所以要进行强制类型转化,强制类型转化可以有两种转法

    Print(std::string("Wangtn"));
    Print(Entity("Wangtn"));

    通常情况下(更简洁的写法)

    Entity a("Wangtn");
    Entity b(22);

    如果我们在类中使用隐式关键词

    class Entity
    {
    private:
        std::string m_Name;
        int m_Age;
    public:
        Entity(const std::string& name)
            :m_Name(name),m_Age(-1){}
        explicit Entity(int age)
            :m_Name("Unknow"),m_Age(age){}
    };

    那么可以看到在主函数的调用中,直接填入数字的隐式方式将会失效

     如果我想要不报错,那么必须要这么写

    Entity b(26);
    Entity b=Entity(26);
  • 相关阅读:
    16、集合--Map接口
    LVM快照备份与恢复
    CentOS 6.3下配置LVM(逻辑卷管理)
    Tomcat 9.0 配置问题 403 Access Denied
    nginx和php-fpm调用方式
    Linux下安装php环境并且配置Nginx支持php-fpm模块
    Nginx 服务器安装及配置文件详解
    Linux编辑器vim键盘详解
    Nginx配置文件详解
    keepalive配置文件详解
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/12811652.html
Copyright © 2011-2022 走看看