C++字符串两边的括号
C++ parentheses around string
如果我有一个函数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
。