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` 可以解决这个问题,但具体是如何实现的?什么时候应该使用它?有没有情况隐式转换反而有用?非常感谢!