C++字符串相加处理

这是《Accelerated C++》一书的第一章的课后题 - 下面的编译是否有问题?

1:

const std::string hello = “Hello”;
const std::string message = hello + “, world” + “!”;

2:

const std::string exclam = “!”;
const std::string message = “Hello” + “, world” + exclam;

第一部分是可以编译成功的,而第二部分是不行的。为什么?

因为在第二部分的第二句,赋值号的右边 先做”Hello” + “,world” 操作,而对于”Hello”和”,world”都是const char[]类型的,在标准C++中这个类型是不能做 “+”操作的。

而对于第一部分,hello + “,world”可以进行成功操作,因为hello为std::string类型,对于这种类型,标准库中重载了其与char[]类型之间的”+”操作符,所以是可以的,并且返回值是std::string类型,当然再与右面的exclam操作也没问题了。对于string类型的“+”操作符,在标准库中重载了string与string的+操作,string与char[]的+操作,以及string与char的+操作。也就是说’x’+hello也是可以的。

所以,为什么两个直接字符串不能相加?很简单一句话,因为C++标准库中没有实现“+”号对于char[]类型的重载以支持char[] + char[]操作。如果你在自己的程序中自己实现,也是可以的。

一般这样处理较方便:
typedef std::string STRING;
strbuf = STRING(“OPTIONS sip:”) + STRING(msn) + STRING(“@”) + STRING(sip_host) + STRING(” SIP/2.0”);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值