• 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);
  • 相关阅读:
    HDU 1160 FatMouse's Speed ——(DP)
    HDU 1114 Piggy-Bank ——(完全背包)
    poj 1458 Common Subsequence ——(LCS)
    HDU 1087 Super Jumping! Jumping! Jumping! ——(LIS变形)
    HDU 1257 最少拦截系统 ——(LIS)
    strrchr函数
    常用位操作
    Map中放置类指针并实现调用
    log4net 一分钟上手
    简单易懂的冒泡排序
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/12811652.html
Copyright © 2020-2023  润新知