Avatar ·

C++ 中关键字 explicit 的含义及作用

大家好!我开始学习 C++,遇到了构造函数前的关键字 `explicit`。目前我了解到它与隐式转换有关,但还不完全理解为什么要使用它。 下面是我写的一个简单例子。我有一个类 `String`,其构造函数接受一个数字(字符串大小): ```cpp class String { public: String(int size) { // 一些代码 } }; void printString(const String& s) { // 打印字符串 } int main() { printString(42); // 这能工作!但为什么呢? return 0; } ``` 我向函数 `printString` 传递了数字 `42`,尽管它期望一个 `String` 对象。而且这竟然能编译通过!我觉得这很奇怪,可能会导致错误。例如,如果我意外传错了类型,编译器不会警告我。 我听说 `explicit` 可以解决这个问题,但具体是如何实现的?什么时候应该使用它?有没有情况隐式转换反而有用?非常感谢!