C++学习笔记 12 隐式构造函数 + 隐式转换 + explicit

隐式

不会明确的告诉你它要做什么,有点像某种情况下的自动的工作。
实际上,C++允许编译器对代码进行一次隐式转换。
C++允许隐式地转换,不需要用cast等做强制转换。

explicit 禁用constructor隐式转换

#include<iostream>
#include<string>

class Entity {
private:
    std::string m_Name;
    int m_Age;
public:
    //explicit 禁止构造函数隐式转换
    explicit Entity(const std::string& name): m_Name(name), m_Age(-1) {}
    explicit Entity(int age) : m_Name("Unkown"), m_Age(age) {}
};

//也可以隐式转换的方式传递参数
void PrintEntity(const Entity& e) {
    //print
}

void testHiddenTypeConvert() {
    Entity e("Cherno");
    Entity e2(20);

    PrintEntity(e);

    //有两次转换,而C++编译器默认只支持一次转换
    //报错,char [] --> std::string --> Entity,两次隐式转换
    Entity e3 = "Cherno";
    //一次隐式转换:string --> Entity
    Entity e4 = std::string("Cherno");
    Entity e5 = 20;

    //显示强转数据类型
    Entity e3 = (Entity)"Cherno";

    //隐式转换方式调用方法参数
    PrintEntity(22);

    //报错,char [] --> std::string --> Entity,两次隐式转换
    PrintEntity("Cherno");
    //正确,char [] --> std::string,一次隐式转换
    PrintEntity(Entity("Cherno"));
    //正确,std::string --> Entity ,一次隐式转换
    PrintEntity(std::string("Cherno"));

}

int main() {
    testHiddenTypeConvert();
    std::cin.get();
}

** explicit adj. 明确的 **

英[ɪkˈsplɪsɪt] 美[ɪkˈsplɪsɪt]

明确的;详述的;直言的, 坦率的;一目了然的;
例句
In addition, parents and teachers can help children by providing explicit instruction regarding the mind as a learning machine.
此外,家长和老师还可以提供明确的指导,帮助孩子把大脑视为一台学习机器。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容