C++ 向char添加字符串*
我试图理解如何将std::string添加到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*中,这会
#包括
#包括
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()
)额外信息:临时加法结果的生存期足够长,可以完成调用(无需访问loststd::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 );