c++的explicit关键字有什么用 防止隐式类型转换【代码安全】

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

c++的explicit关键字有什么用 防止隐式类型转换【代码安全】-第1张图片-佛山资讯网

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++ 编译错误 隐式类型转换 隐式转换

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~