C++ 向char添加字符串*

C++ 向char添加字符串*,c++,stdstring,C++,Stdstring,我试图理解如何将std::string添加到char*中。 此代码正在编译并按预期工作: #包括 #包括 void func(常量字符*str){ printf(“%s\n”,str); } int main(){ 字符arr[]={'a','b','c',0}; char*str=arr; func((str+std::string(“xyz”)).c_str();//此行 返回0; } 但我不明白构造函数/方法在调用什么,以及调用的顺序。这是将std::string添加到char*中,这会

我试图理解如何将std::string添加到char*中。 此代码正在编译并按预期工作:

#包括
#包括
void func(常量字符*str){
printf(“%s\n”,str);
}
int main(){
字符arr[]={'a','b','c',0};
char*str=arr;
func((str+std::string(“xyz”)).c_str();//此行
返回0;
}

但我不明白构造函数/方法在调用什么,以及调用的顺序。这是将std::string添加到char*中,这会生成另一个std::string,但char*不是类,也没有加法运算符。

您在左侧使用
运算符+
表示
常量char*
,在右侧使用临时
std::string
。这是过载#4:

结果是一个新的、临时的
std::string
对象,它拥有连接的新缓冲区
“abcxyz”
。它可以绑定到类型为
const char*
的函数参数,并且只要函数体执行,它就有效。

此行:

str + std::string("xyz")
致电下列接线员:

https://en.cppreference.com/w/cpp/string/basic_string/operator%2B

template< class CharT, class Traits, class Alloc >
    basic_string<CharT,Traits,Alloc>
        operator+(const CharT* lhs,
                  basic_string<CharT,Traits,Alloc>&& rhs );
https://en.cppreference.com/w/cpp/string/basic_string/operator%2B
模板<类别图表、类别特征、类别分配>
基本字符串
操作员+(常数图*lhs,
基本字符(字符串(&rhs);

并创建一个临时的
std::string
(有效期至完整语句结束),对其调用
.c_str()
,该函数返回
const char*
,并将其传递给函数。

std::string
有一个重载的
运算符+
,它在左侧接受
char*
。结果是
std::string
。(因此,需要
.c_str()
)额外信息:临时加法结果的生存期足够长,可以完成调用(无需访问lost
std::string
)。
str + std::string("xyz")
https://en.cppreference.com/w/cpp/string/basic_string/operator%2B

template< class CharT, class Traits, class Alloc >
    basic_string<CharT,Traits,Alloc>
        operator+(const CharT* lhs,
                  basic_string<CharT,Traits,Alloc>&& rhs );