我有一个方法:
void Foo::Bar(const std::string &str)
{
printf("%d", str.length());
}
当我这样做时它会无缝地工作
foo.Bar("hello");
我认为 "hello"
是一个 const char *
,而不是一个 std::string
?
最佳答案
有两种方式可以隐式转换用户定义的类型:
- 使用转换构造函数(例如“std::string::string(const char* c_string)”)。
- 使用转换运算符(例如“OldType::operator NewType() const”)。
任何采用单个参数且不使用关键字“explicit”的构造函数都定义了隐式转换(从参数的类型到正在构造的对象的类型)。标准字符串类有意不使用“explicit”,以提供这种转换的便利。
关于c++ - 为什么我可以将 "C string"传递给需要 std::string 的函数并且它有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919698/