当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么

When i run the following code adding str.front() + str.back it gives me 200 but why?

本文关键字:str 为什么 200个 back 运行 代码 添加 front      更新时间:2023-10-16
string str = "abcdefg"; 
cout << str.back() + str.front();

C 控制台:200

#include <iostream>
int main() {
    std::string str = "abcdefg";
    for(int v : str) {
        std::cout << v << " " << static_cast<char>(v) << "n";
    }
}

可能的输出:

97 a    // front()
98 b
99 c
100 d
101 e
102 f
103 g   // back()

97 103 = 200

当我运行以下代码添加str.front() str.back时,它给了我200个,但是为什么?

字符被编码为整数。char是整数类型。当算术操作(例如加法)的操作数小于int的整数类型时,这些操作数被促进到int,这也是表达式的结果类型。这就是为什么输出不是编码字符,而是整数的十进制表示。

为什么值200,这是如此碰巧的是,在您的系统的字符编码中,代表'a'的值以及代表'g'总计200的值。

您正在添加两个 char s,这会导致整数。

如果要将两个字符组合到字符串,则必须至少提供其中一种字符串类型,例如:

cout << str.back() + string{str.front()};

cout << str.back() + str.substr(0, 1);

如果您只想输出两个字符 - 您可以一次输出一个字符:

cout << str.back() << str.front();