c++ - 为什么我可以将 "C string"传递给需要 std::string 的函数并且它有效?

标签 c++ type-conversion

我有一个方法:

void Foo::Bar(const std::string &str)
{
    printf("%d", str.length());
}

当我这样做时它会无缝地工作

foo.Bar("hello");

我认为 "hello" 是一个 const char *,而不是一个 std::string

最佳答案

有两种方式可以隐式转换用户定义的类型:

  1. 使用转换构造函数(例如“std::string::string(const char* c_string)”)。
  2. 使用转换运算符(例如“OldType::operator NewType() const”)。

任何采用单个参数且不使用关键字“explicit”的构造函数都定义了隐式转换(从参数的类型到正在构造的对象的类型)。标准字符串类有意不使用“explicit”,以提供这种转换的便利。

关于c++ - 为什么我可以将 "C string"传递给需要 std::string 的函数并且它有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919698/

相关文章:

java - 在 Java 代码中从 scala.collection.Seq<String> 转换为 java.util.List<String>

c# - 将 ATL::CComBSTR 转换为 BSTR*

c++ - 如何将输入焦点设置到 Qt 中显示的对话框?

c++ - GNU Make - 从规则/目标中的 shell 命令输出设置 MAKEFILE 变量

c++ - OpenCV 立体校准具有较低的重投影误差,但不正确

c++ - 从指向成员的指针中恢复父级

python - 为什么 np.nan_to_num() 不转换这个 (n x m) 数组?

algorithm - 在精度损失后从 int 中恢复 long

c# - 如何将文本框的输入转换为十进制数

error-handling - 使用DifferentialEquations.jl Julia程序包时的方法错误