c++ - 我使用相同的方法进行字符串连接,但第一个显示错误,第二个显示结果

标签 c++ string

此代码显示错误。

#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/

相关文章:

C++ 将结构中的 char* 数据复制到另一个结构

c++ - 为什么在使用字符索引数组时会出现这种不同的行为?

excel - Excel 中的子字符串

c++ - 从文件中读取返回一个我没想到的结果,试图理解为什么

c++ - 如何将 DLL 链接到我的项目?错误 LNK2019 : unresolved external symbol

c++ - 默认构造的(空的)shared_ptr 会自动初始化为nullptr 吗?

c++ - 为什么添加两个字符串文字不使用 operator+?

c++ - 随着线程数的增加,Lua 会扼杀多线程性能(包括条形图)

c++ - 矩阵和生成的平铺世界,如何生成边?

java - 按照模板将 long 转换为字符串