【发布时间】:2019-07-15 07:32:02
【问题描述】:
我试图了解将 std::string 添加到 char* 的工作原理。 此代码正在按预期编译和工作:
#include <string>
#include <cstdio>
void func (const char* str) {
printf("%s\n", str);
}
int main () {
char arr[] = {'a','b','c',0};
char *str = arr;
func((str + std::string("xyz")).c_str()); // THIS LINE
return 0;
}
但我不明白调用的是什么构造函数/方法以及它的工作顺序。这是将 std::string 添加到 char* 中,它给出了另一个 std::string,但 char* 不是一个类,它没有加法运算符。
【问题讨论】:
-
std::string有一个重载的operator+,它在左侧接受char*。结果是std::string。 (因此,需要.c_str()。)额外信息:临时加法结果的生命周期足够长以完成调用(无法访问丢失的std::string)。