为什么我们不能在C ++中添加两个C字符串?这就是我所知道的,请纠正我,并加入其中。
是不是因为'+'运算符没有重载来执行操作。编译器本质上将变量名称解释为指针。既然,我们不能添加两个指针,所以我们不能像这样添加两个字符串变量:str = str +“str”?
答案 0 :(得分:2)
首先,要意识到将字符串连接为std :: string :: operator +()和std::string::operator+=(),这是一个概念上与添加不同的操作。
你要问的事情"添加"是C风格的字符串,来自C,所以C ++支持它们。 C中没有运算符重载。
C风格的字符串只是指向内存中字符数组的指针,它(希望)由NULL字符'\0'
终止。 char *
可能指向C字符串,也可能不指向。你必须自己管理内存。内存可以静态分配,并且可能只有足够的空间容纳您放在那里的字符,例如定义字符串char myString[] = "blah";
时。没有内置的自动内存重新分配机制,所以即使定义了这样的连接函数,它也不能保证你想要附加到目标缓冲区中的字符串的空间。
相比之下,在C ++中,std :: string是一个根据需要动态分配内存的类。 std :: string对象总是std :: strings;他们没有指出其他事情。连接运算符是定义的(+,+ =),它们为您处理内存(重新)分配。
...现在你知道了C ++中使用的两种主要字符串类型,所以你可以对" C风格的字符串进行进一步的研究。或" C字符串" 1 ;和std :: string,这是" C ++字符串"。也许从维基百科开始:String (C++)。
1 FYI," C-String"也是一种暴露服装的名称,因此您可能会使用该术语混合使用NSFW个搜索结果。