【发布时间】:2015-10-21 13:22:41
【问题描述】:
我有以下简单的代码:
#include<iostream>
const char str[]={'C','+','+'};
int main()
{
const char *cp=str;
std::cout<<*str<<std::endl;
while (*cp++>0)
std::cout<<*cp;
}
不明白为什么会打印出来
C
++
后缀增量运算符不应该评估表达式但返回值不变吗? (我仔细检查了增量、取消引用和关系运算符的优先级,它应该可以工作)
【问题讨论】:
-
你期望什么输出?
-
我认为我在 cp 增加之前取消了它的引用。所以我期待它打印整个字符串。
-
您正在将
'\0'打印到cout流。这是 this question 中某些人指出的 UB。 -
“所以我希望它打印整个字符串”。它正在打印整个字符串,它只是插入一个额外的换行符(和一个
\0) -
否,因为第一次调用 cout 独立于第二次调用。也许我的代码不够清晰。但我发现了我的错误,所以还是谢谢你。
标签: c++ pointers post-increment c-strings