当我将 char 数组发送到输入参数为字符串的函数时会发生什么?

What happens when I send a char array into a function whose input parameter is a string?

本文关键字:函数 字符串 什么 参数 char 数组 输入      更新时间:2023-10-16

我知道它会起作用。我更感兴趣的是如果我发送它会发生什么转换。对我来说,将参数更改为char*然后自己使用to_String?进行转换是否更好 或者从长远来看,这很好吗?

std::string有一个构造函数来处理这种情况:

string (const char* s);

这使得以下工作:

char *s = "Hello, World!";
std::string str(s);

一旦sNULL就会发生长期运行错误。

文档在这里

因为std::string有一个构造函数,该构造函数接受编译器是否足够聪明const char*可以使用它,并允许您将const char*作为std::string参数传递。 见 http://en.cppreference.com/w/cpp/language/implicit_conversion

在 c++ 中,当类型 T 具有采用 U 类型单个参数(例如 T::T(U((的构造函数时,编译器将允许代码从类型 U 隐式转换为类型 T。

请考虑以下代码

struct U
{
//etc.
}
struct T
{
T(U obj);
//etc.
}
my_func(T param);
int main()
{
U u;
my_func(u);
}

当编译器到达"my_func(u("并看到my_func需要 T 类型的参数时,它会查看 T 的构造函数。当它看到构造函数"T(U obj(;"时,它会将其就地插入函数调用中,如下所示:

//...
int main()
{
U u;
my_func(T(u));
}

重要的是要注意,这是完全静默完成的,如果它是在意外而不是故意的情况下完成的,可能会导致一些困难的调试。