C++ C++;用'解释一个cout+';在里面?

C++ C++;用'解释一个cout+';在里面?,c++,cout,C++,Cout,我一直在用Java/C++来回移动,所以我把控制台输出搞砸了,不小心写了这样的行: cout << "num" + numSamples << endl; cout << "max" + maxSampleValue << endl; cout“num”类型为字符常量[4]。如果numSamples是整数,“num”+numSamples类型是const char*。所以你调用操作符,它只是指针算法。比如说, cout << "num

我一直在用Java/C++来回移动,所以我把控制台输出搞砸了,不小心写了这样的行:

cout << "num" + numSamples << endl;
cout << "max" + maxSampleValue << endl;

cout
“num”
类型为
字符常量[4]
。如果
numSamples
是整数,
“num”+numSamples
类型是
const char*
。所以你调用
操作符,它只是指针算法。比如说,

cout << "num" + 1 << endl;

cout原因很简单:

“num”和
“max”是字符串文字。它们的类型是
const char*
。 假设
numSamples
是一个整数,您要做的是指针算术

基本上,您正在打印一个字符串,该字符串指向
“num”
+
numSamples
字节


如果您确实
cout请记住,尽管iostreams重载
)来执行I/O,但它们最初被定义为位移位运算符。当编译器解析表达式时,基本上是看到“操作数、运算符、操作数”,然后检查操作数是否属于可以应用该运算符的类型

在本例中,我们有一个字符串文本和(显然)某种整数,编译器知道如何对它们进行数学运算(在将字符串文本转换为指针之后)

然而,从编译器的角度来看,这与以下内容没有太大区别:

int a, b=1, c=2, d = 3;

a = b << c + d;
inta,b=1,c=2,d=3;

a=b如果你看一下,你会发现
+
之前被计算,
cout
在这里是不相关的。
numSamples
maxSampleValue
的类型是什么
int
s?尝试使用更长的字符串,并使用0、1、2等代替变量。您询问的
cout
表示对该语言的误解
cout
不是一个关键词,它也不神奇。这是一个普通的物体
cout
“num”+numSamples
的结果馈送;它可以知道原始表达式中包含一个
+
。根据您的编译器,您可以使用
“num”s+numSamples
(使用适当的名称空间),并得到您所期望的结果。(哦,我的意思是写:“它无法知道…”)这并不能回答问题。字符串文字的类型为
常量字符(&)[4]
,有时会衰减为
常量字符*
,包括这种情况。@MooingDuck它们是
常量字符[4]
类型的左值。无
int a, b=1, c=2, d = 3;

a = b << c + d;
"num" + numSamples