我在写Fizz Buzz的时候遇到了一个意想不到的互动。如果我执行std::cout<,它会自动将I(int)转换为字符串并打印出来?但是如果将
i
赋值给一个字符串变量,它会打印一个空白?我设法通过使用std::to_string
解决了这个问题,但我只是想知道为什么打印to_print
会打印一个空白,而不是一个整数或抛出某种错误?
#include <iostream>
#include <string>
int main() {
for (int i = 1; i <= 10; i++) {
// prints i
std::cout << i;
}
std::cout << std::endl;
for (int i = 1; i <= 10; i++) {
std::string to_print;
to_print = i;
// prints blank rather than i
std::cout << to_print;
}
}
没有String::Operator=(int)
,但有String::Operator=(char)
,它被选为最佳可行候选项。
因此,您将代码为1..10的单个字符分配给字符串,这些字符显然会被您的终端打印为空白。
尝试赋值65,它应该打印A
。
变量i将根据其值和ASCII表转换为一个字符。前几个字符不可见。
将代码更改为从49开始迭代,这是字符“0”的十进制值:
for (int i = 49; i <= 57; i++) {
std::string to_print;
to_print = i;
std::cout << to_print;
}
打印:123456789