std::string 添加到 char*
std::string addition to char*
我想了解将 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;
}
但我不明白 constructors/methods 调用的是什么以及它的工作顺序。这是 std::string 到 char* 的加法,得到另一个 std::string,但 char* 不是 class,它没有加法运算符。
您在左侧使用 operator +
作为 const char*
,在右侧使用临时 std::string
。这是超载 #4 here:
template< class CharT, class Traits, class Alloc >
basic_string<CharT,Traits,Alloc>
operator+( const CharT* lhs,
const basic_string<CharT,Traits,Alloc>& rhs );
Return value
A string containing characters from lhs followed by the characters from rhs
加上std::string
和char
,上面的模板签名可以"interpreted"为
std::string operator+ (const char* lhs, const std::string& rhs);
结果是一个新的临时 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 );
并创建一个临时 std::string
(在完整语句结束之前有效),您可以在其上调用 .c_str()
,其中 return const char*
被传递给函数。
我想了解将 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;
}
但我不明白 constructors/methods 调用的是什么以及它的工作顺序。这是 std::string 到 char* 的加法,得到另一个 std::string,但 char* 不是 class,它没有加法运算符。
您在左侧使用 operator +
作为 const char*
,在右侧使用临时 std::string
。这是超载 #4 here:
template< class CharT, class Traits, class Alloc > basic_string<CharT,Traits,Alloc> operator+( const CharT* lhs, const basic_string<CharT,Traits,Alloc>& rhs );
Return value
A string containing characters from lhs followed by the characters from rhs
加上std::string
和char
,上面的模板签名可以"interpreted"为
std::string operator+ (const char* lhs, const std::string& rhs);
结果是一个新的临时 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 );
并创建一个临时 std::string
(在完整语句结束之前有效),您可以在其上调用 .c_str()
,其中 return const char*
被传递给函数。