C++如何解释一个带有'+'的cout?

Gui*_*rum 27 c++ cout

我一直在使用Java/C++来回移动,所以我搞砸了我的控制台输出并意外地编​​写了如下行:

cout << "num" + numSamples << endl;
cout << "max" + maxSampleValue << endl;
Run Code Online (Sandbox Code Playgroud)

每一个都给了我在程序中的一些其他字符串.我现在意识到我的错误,但是C++解释这些行是什么,以便它们在我的程序中输出不同字符串的不同部分?

Xaq*_*aqq 36

这有一个简单的原因:

"num"并且"max"是字符串文字.他们的类型是const char *.假设numSamples是一个整数,你所做的是指针算术.

您基本上打印一个指向"num"+ numSamples字节的字符串.

如果你这样做cout << "num" + 1 << endl会打印"um".

您可能已经想到了,但正确的方法是: cout << "num" << numSamples << endl;

另外,你问:

但是什么是C++解释这些行,以便它们在我的程序中输出不同字符串的不同部分?

如前所述,"num"是一个字符串文字.通常,字符串文字位于二进制程序中的相同位置:.rodata.所有其他字符串文字都位于此区域中,因此当您将指针推进一定量的字节时,您可能会指向其他一些字符串文字,从而打印(部分)它们.

  • @MooingDuck它们是`const char [4]`类型的左值.没有`&`. (7认同)
  • 字符串文字的类型为`const char(&)[4]`,有时候_decays_到`const char*`,包括这种情况. (6认同)

Ale*_*exD 30

它只是指针算术.例如,

cout << "num" + 1 << endl;
Run Code Online (Sandbox Code Playgroud)

会打印一个字符串((address of)"num" + 1),即"um".

如果我们添加的值超过字符串的长度,那么我们有未定义的行为.