我只是在回顾我的C ++。我试着这样做:
#include <iostream>
using std::cout;
using std::endl;
void printStuff(int x);
int main() {
printStuff(10);
return 0;
}
void printStuff(int x) {
cout << "My favorite number is " + x << endl;
}
问题发生在printStuff
函数中。当我运行它时,输出中省略了&#34;我最喜欢的数字是&#34;的前10个字符。输出是&#34; e number是&#34;。这个数字甚至都没有出现。
解决这个问题的方法是
void printStuff(int x) {
cout << "My favorite number is " << x << endl;
}
我想知道计算机/编译器在幕后做了什么。
答案 0 :(得分:3)
它是简单的指针算法。字符串文字是一个数组或char
,并将显示为指针。将10添加到指针,告诉您要从第11个字符开始输出。
没有+运算符可以将数字转换为字符串并将其连接到char数组。
答案 1 :(得分:1)
在这种情况下,+重载运算符不连接任何字符串,因为x是整数。在这种情况下,输出移动了右值时间。所以前10个字符不打印。查看this参考。
如果你要写
cout << "My favorite number is " + std::to_string(x) << endl;
它会起作用
答案 2 :(得分:0)
添加或递增字符串并不会增加它包含的值,但它的地址是:
这不是msvc 2015或cout的问题,而是它在内存中向后/向前移动: 向你证明cout是无辜的:
#include <iostream>
using std::cout;
using std::endl;
int main()
{
char* str = "My favorite number is ";
int a = 10;
for(int i(0); i < strlen(str); i++)
std::cout << str + i << std::endl;
char* ptrTxt = "Hello";
while(strlen(ptrTxt++))
std::cout << ptrTxt << std::endl;
// proving that cout is innocent:
char* str2 = str + 10; // copying from element 10 to the end of str to stre. like strncpy()
std::cout << str2 << std::endl; // cout prints what is exactly in str2
return 0;
}