>a; int l=a.size(); -6ren">
gpt4 book ai didi

c++ - 使用c + = expression和c = c + expression时输出中的std::string差异

转载 作者:行者123 更新时间:2023-12-01 09:01:02 25 4
gpt4 key购买 nike

在下面的代码中

#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,c="!";
cin>>a;
int l=a.size();
for(int i=0;i<l;i++)
{
c=c+"#"+a[i];
}
cout<<c;
}
如果我将 c=c+"#"+a[i]替换为 c+="#"+a[i],则会得到意外的输出。
第二种情况下的输出为!boxboxboxbox,与 https://www.onlinegdb.com/上的输入无关。
在“dev c++”上,输出为-
enter image description here
但是a + = b等效于a = a + b。那输出差异的原因是什么?

最佳答案

给定c+="#"+a[i];,首先评估"#"+a[i]"#"的类型为const char[2],并且可能会衰减为const char*的指针,a[i]的类型为char,它是整数类型,然后"#"+a[i]仅执行指针算术,并且不会按预期方式连接字符串。 (并且指针算术的结果可能超出数组的范围,然后导致UB。)
另一方面,在c=c+"#"+a[i];中,首先对c+"#"求值,它将"#"附加到c上并返回新的std::string(由 operator+ for std::string ),在其上附加a[i]并将结果分配给c

But a += b is equivalent to a = a + b


如果将 b集成在一起,即将括号添加为 ("#"+a[i]),则 c+=("#"+a[i]);c=c+("#"+a[i]);都会产生相同的结果,即使这不是您期望的结果。

关于c++ - 使用c + = expression和c = c + expression时输出中的std::string差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62948890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com