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.
此外,家长和老师还可以提供明确的指导,帮助孩子把大脑视为一台学习机器。

浙公网安备 33010602011771号