为什么标准C++中两个直接字符串常量不能相加
来源:互联网 发布:php短信接口开发实例 编辑:程序博客网 时间:2024/05/16 18:46
这是《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[]操作。如果你在自己的程序中自己实现,也是可以的。
C++标准库下载
原文地址:点击打开链接
- 为什么标准C++中两个直接字符串常量不能相加
- 【C++】两个字符串相加
- Java中字符串常量相加
- Java中字符串相加和字符串常量相加区别
- Java中字符串相加和字符串常量相加区别
- C中不能直接比较两个double类型
- C中字符串常量
- C代码中字符串常量中如果直接输入回车导致不识别的原因分析.
- 子表中两个字符串相加
- 两个整数字符串相加
- 为什么两个float类型的数值不能直接相等
- 两个 Long 类型为什么不能直接用==比较
- C语言中字符串常量
- c语言中float为什么不能直接用==与0比较
- 请用C语言在32位环境下,两个无符号长整数相加的函数,相加之和不能存储在64位变量中
- java 字符串拼接为什么要用 StringBuilder 而不直接用 String 相加连接
- 字符串常量不能修改
- C风格字符串 C++string对象 字符串常量 字符串直接量
- TortoiseSVN设置自动锁定功能
- python中的urlencode与urldecode
- hdu 4427
- 将ocx和DLL文件打包成cab文件,实现IE浏览器在线安装
- Javascript_14_DOM_radio练习
- 为什么标准C++中两个直接字符串常量不能相加
- html+css制作任意大小边框一致的面板
- android_android4.0.3修改启动动画和开机声音
- js获取select标签选中的值和 赋值
- 云存储中关于URL规则的问题页面
- spring AOP中的AfterThrowing增强处理不能完全处理异常
- 报表ReportViewer显示图片--rdlc
- 从互联网校对系统时间
- UBUNTU 13.04 DHCP