如果我有一个功能myfunc(const char *x, int y)
和一个std::string
变量mystring
,我可以像myfunc()
一样致电myfunc((mystring + "string constant").c_str(), 4)
吗?如果没有,最好的方法是什么?
答案 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
的好习惯会更好。