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

posted @ 2025-12-11 10:16  超轶绝尘  阅读(3)  评论(0)    收藏  举报