此代码显示错误。
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
s="b"+"k"+"4";
cout<<s<<endl;
return 0;
}
此代码工作正常。
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
string s1 = "a";
s=s1+"b"+"k"+"4";
cout<<s<<endl;
return 0;
}
我不知道为什么会发生这种情况,在这两种情况下我都使用字符串?
最佳答案
与
s="b"+"k"+"4";
你的文字字符串将衰减为指针,你将把这些指针加在一起,并将结果分配给s
。该指针添加没有任何意义,没有重载的 +
运算符函数需要两个 const char *
参数。
但是
s=s1+"b"+"k"+"4";
您从一个 std::string
对象开始,该对象有重载的 +
运算符函数,该函数返回一个 std::string
目的。简而言之,它类似于
s=((s1+"b")+"k")+"4";
也就是说,您有 s1 + "b"
,它返回一个临时 std::string
,然后您将 "k"
添加到其中,它返回一个临时的 std::string
,您可以在其中添加 "4"
,这会返回一个临时的 std::string
并分配给s
。或者显式使用临时对象和函数调用:
std::string t1 = operator+(s1, "b");
std::string t2 = operator+(t1, "k");
std::string t3 = operator+(t2, "4");
s = t3;
关于c++ - 我使用相同的方法进行字符串连接,但第一个显示错误,第二个显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60827966/