C++ 中字面值和 string 对象相加
来源:互联网 发布:青少年禁毒网络大赛 编辑:程序博客网 时间:2024/06/04 18:51
我的主力博客:半亩方塘
标准库允许把字符串字面值和字符字面值转换为 string 对象,当把 string 对象和字符字面值以及字符串字面值混在一条语句中使用时,必须确保加法运算符( + )的两侧运算对象至少有一个是 string:
string s1 = "hello", s2 = "world";string s3 = s1 + ", " + s2 + '\n';string s4 = s1 + ", ";string s5 = "hello" + ", "; // 错误,两个运算对象都不是 string// 正确,每个加法运算符都有一个运算对象 stringstring s6 = s1 + ", " + "world";string s7 = "hello" + ", " + s2; // 错误,不能把字面值直接相加
s6 的初始化形式的工作机理和连续输入连续输出相同,可以用如下的形式分组:
string s6 = (s1 + ", ") + "world";
其中 s1 + ", "
的结果是一个 string 对象,它同时作为第二个加法运算符的左侧运算对象,因此上述语句和下面的两个语句是等价的:
string tmp = s1 + ", "; // 正确,加法运算符有一个运算对象是 stringstring s6 = tmp + "world"; // 正确,加法运算符有一个运算对象是 string
另一方面,s7 的初始化是非法的,根据其语义加上括号后就成了下面的形式:
string s7 = ("hello" + ", ") + s2; // 错误,不能把字面值直接相加
很容易看到,括号内的子表达式试图把两个字符串字面值加在一起,而编译器根本没法做到这一点,所以这条语句是错误的。
因为某些历史原因,也为了与 C 兼容,所以 C++ 语言中的字符串字面值并不是标准库类型 string 的对象,切记,字符串字面值与 string 是不同的类型
参考:《C++ Primer 中文版第5版》
0 0
- C++ 中字面值和 string 对象相加
- C++string对象和字符串字面值的连接,+操作
- C++中字符串字面值和字符相加
- C++中字符串字面值和字符相加
- 1105 Java中String字面值对象和构造方法创建对象的区别
- c字符串、string对象、字符串字面值的区别
- c字符串、string对象、字符串字面值的区别
- c字符串、string对象、字符串字面值的区别
- c字符串、string对象、字符串字面值的区别
- c++primer 中说字符串字面值 和string类型不是同一种类型
- java面试题:String字面值对象和构造方法创建对象的区别
- C++学习笔记(2),c字符串、string对象、字符串字面值的区别
- C和C++中字串符(String)和字符串字面量(String Literal)的区别
- C和C++中字串符(String)和字符串字面量(String Literal)的区别
- String字符串常量相加和new对象
- String字面值对象和构造方法创建对象的区别:String s = new String("hello")和String s = "hello";的区别
- C++中字面值常量和字面值类型
- C++中字面值常量和字面值类型
- STM32的函数ssert_param(IS_GPIO_ALL_PERIPH(GPIOx));
- 简单分析Cocos2d-x 引擎运行逻辑
- 10 Papers Every Programmer Should Read (At Least Twice) --- Michael Feather
- AndroidAnnotations——Enhance Fragments 优化Fragments
- 不容易系列之一
- C++ 中字面值和 string 对象相加
- Enhancing custom classes 优化自定义类
- UML之九种图分析
- python和FTP
- 不容易系列之(3)—— LELE的RPG难题
- 设置 core dump文件名的格式
- 捷普选定英国电信(BT)为其打造标准化的全球网络IT服务
- AndroidAnnotations——Enhance custom views 优化自定义组件
- 字符统计(杭电1860)