C++字符串两边的括号

C++ parentheses around string

本文关键字:字符串 C++      更新时间:2023-10-16

如果我有一个函数myfunc(const char *x, int y)和一个std::string变量mystring,我可以像myfunc((mystring + "string constant").c_str(), 4)一样调用myfunc()吗?如果没有,最好的方法是什么?

不,

你不应该这样称呼它。

myfunc((mystring + "string constant").c_str(), 4)

由于临时创建是为了容纳mystring + "string constant"。当您在该临时上应用 c_str 时,它将返回该字符串的内部句柄。因此,如果您得到不希望的结果,请不要感到惊讶。

如果可以选择,请将myfunc更改为:

myfunc(std::string const& x, int y);

然后,您可以使用:

myfunc((mystring + "string constant"), 4)

您可以在函数中安全地调用临时:

myfunc((mystring + "string constant").c_str(), 4);

只要您只从const char *x读取字符串,而不尝试使用非常量强制转换对其进行修改。临时将在完整表达式结束时销毁。正如其他人所说,最好使用std::string