围绕字符串的C ++括号

时间:2014-11-30 07:40:15

标签: c++ string

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

3 个答案:

答案 0 :(得分:1)

不,你不应该这样称呼它。

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

创建临时文件以保留mystring + "string constant"。当您对该临时应用c_str时,它将返回该字符串的内部句柄。所以,如果你得到不希望的结果,不要感到惊讶。

答案 1 :(得分:1)

如果您有选项,请将myfunc更改为:

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

然后,您可以使用:

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

答案 2 :(得分:1)

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

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

只要您只是从const char *x读取字符串而不尝试使用非const转换来修改它。临时表将在完整表达式表达式结束时销毁。正如其他人所说,使用std::string的好习惯会更好。