explicit关键字用于禁止单参数构造函数的隐式类型转换,提升安全性与可读性;如String s = 10或print(42)将报错,必须显式调用String(10)或print(String(42))。

explicit 关键字用于修饰单参数构造函数(或多个参数但除第一个外都有默认值的构造函数),它的核心作用是禁止编译器进行隐式类型转换,从而避免意外的、不易察觉的类型转换行为,提升代码的安全性和可读性。
防止意外的隐式转换
没有 explicit 时,编译器可能在你不注意的地方自动调用构造函数完成类型转换。比如:
class String {
public:
String(int n) { /* 分配 n 字节内存 */ }
String(const char* s) { /* 构造字符串 */ }
};登录后复制
此时下面的代码能悄悄通过:
String s = 10; // 隐式调用 String(int),s 变成一个长度为 10 的空字符串 void print(String str); print(42); // 隐式转换:传入 int 42 → 构造临时 String 对象 → 调用 print
登录后复制
这通常不是程序员本意,容易引发逻辑错误或性能问题(如无意义的临时对象)。
立即学习“C++免费学习笔记(深入)”;
标签: js json 字节 c++ 编译错误 隐式类型转换 隐式转换
还木有评论哦,快来抢沙发吧~