为什么这段代码在在线 C++ 编译器上没有输出?

Why does this code give no output on online C++ compilers?

我正在使用在线编译器试验 C++ 中的语句。当我尝试 运行 这个特定代码时

cout << num[i] + " " + num[i];

在线编译器没有输出。我可以将 + 符号更改为 << 但我想知道代码在这些在线编译器上没有给出任何输出的原因。

我试过的在线编译器是onlinegdb, programiz, and jdoodle

#include <iostream>
#include <string>

int main() {
    std::string num = "123";
    int i = 0;
    std::cout << num[i] + " " + num[i];
    return 0;
}

C++ 不像 JavaScript 或许多 higher-level 语言,因为你不能用 +,'s. As shown in Lewis' 来分隔你的数据回答,您希望打印的每个项目都必须用 insertion 分隔符 (<<) 分隔。至于提取,你可以使用extraction分隔符(>>)。

在你的例子中,你正在对字符本身进行数学运算(将它们的数字 ASCII 表示加在一起,这可能会打印出不可打印和不可见的字符)。可打印的 ASCII 字符范围从 32(space 字符)到 127(删除字符)(基数 10)。当对 '1' + ' ' + '1' 求和时,您剩下的 (49 + 32 + 49) 或 (130) 超出了可打印字符范围。或者您也可能正在访问垃圾,正如@pm100 在评论中所说的那样 pointer arithmetic.


下面是使用插入运算符的例子:

#include <iostream>

int main(void) {
    int some_int = 1;

    std::cout << "this is my " << some_int << "st answer on Whosebug :)"
    << std::endl;

    return 0;
}

以及提取运算符:

#include <iostream>

int main(void) {
    int num;

    std::cout << "Enter an integer: ";
    std::cin >> num; // stores the input into the `num` variable
    std::cout << "The number is: " << num << std::endl;
    return 0;
}

指针运算:

const char* get_filename(const char* _path, size_t _offset) {
    return (_path + _offset);
}

// This is an example
//
// path = "path/to/my/file/file.txt";
// offset  ^               ^
//         0               |
//        + 16 ------------|
// path = "file.txt";