为什么一个表达式中的 std::string 连接给出的结果与逐个字符不同的结果?
Why std::string concatenation in one expression gives different result than char by char?
我正在从 std::string 的中间连接 3 个字符。如果我逐个字符地执行,我会得到预期的结果,但是如果我只在一个表达式中执行此操作,我会得到一个奇怪的结果。为什么?
#include <string>
#include <iostream>
using namespace std;
int main()
{
string s1 = "abcdefghijklmnopq";
string s2 = "";
string s3 = "";
s3+=s1[4];
s3+=s1[5];
s3+=s1[6];
cout << s3 << endl; // Expected behaviour
s2=s1[4]+s1[5]+s1[6];
cout << s2 << endl; // ?????
}
s1[4]+s1[5]+s1[6]
对char
类型使用内置+
:每个参数都提升为int
,表达式是int
类型。当它被分配给s2
时,将调用重载的=
运算符char
,并且表达式在赋值之前被截断为char
。如果您的平台上signed
char
,则这是定义的实现。请参阅 http://en.cppreference.com/w/cpp/language/implicit_conversion。
s3+=s1[4];
和公司使用重载的+=
运算符在std::string
上char
参数。定义为将char
连接到字符串。
最后从C++14开始,你可以使用美丽的
s2 = ""s + s1[4] + s1[5] + s1[6];
如果substr
不能来救你(s2 = s1.substr(4, 3);
会在这种特殊情况下完成这项工作(。请注意 C++14 标准库中定义的用户定义的文字""s
。
相关文章:
- 尝试将字符串/字符转换为整数会产生意外结果
- 当我用"ñ"字符循环访问字符串时出现奇怪的结果
- 字符到int8_t转换会产生意想不到的结果?
- 为什么一个表达式中的 std::string 连接给出的结果与逐个字符不同的结果?
- 通过正则表达式拆分字符串会切断结果的第一个字母
- 如果一个字符,比如说"9",我减去"0",我在结果上使用 is 数字,我是真还是假
- 对于字符串中的每个字符都会给出错误的结果
- 尝试以随机字符(长读取)打印字符串返回结果
- 为什么我得到这个字符指针的不同结果?
- C++使用 std::get_time 解析 YYMMDD ISO 8601 日期字符串会得到意外结果
- Cout删除了(未签名的字符)指针,给了我意外的结果
- 在将数组与字符数组进行比较后需要帮助输出一次结果
- 我不明白为什么当我按位或短字符时得到这个结果
- C++:输出文件中ASCII字符计数频率的结果时出现的奇怪数字
- 为什么字符<<和字符>>中间结果 int
- 宽字符输出结果
- 如何使用SIMD比较两个字符向量并将结果存储为浮点值
- 使用 const 指针的 C 样式字符返回不正确的结果
- 类中的动态字符数组不会打印正确的结果
- XOR错误的结果,转义字符