我是C ++的新手,尝试从C语言迁移到这种新语言,但使用它提供的新功能。感谢您的支持
问题是,简单直接,' '在std :: cout做什么?
#include "includes.h"
int main( ){
char c1 = 'x', c2;
int i1 = c1 , i2 = 'x';
c2 = i1;
std::cout << c1 <<'<< i1 <<'<< c2 <<'\n';
}
我从Bjarne Stroustrup Book(&#34; Programming Principles and Practice using C ++&#34; second edition)复制了这段代码并做了一些细微差别。在其中,他说输出将是x 120 x或x120x(我的眼睛不能从印刷品中找出差异),但事实并非如此。
答案 0 :(得分:1)
单引号用于环绕 一个字符文字。像:
'A' 'C' 'x' ' ' '5' etc.
单引号'
并不意味着包围字符串文字(由多个字符文字组成),因此这样做是错误的:
`Hello World`
或者在你的情况下:
'<< i1 <<'
所以经验法则是:当使用单引号'a'
将char文字环绕时,处理字符串文字时用双引号括起来:"Some string 123"
。
如果您只是尝试打印出i2
变量,请使用:
std::cout << c1 << i1 << c2 << '\n';
<强>更新强> 规则有例外。一些实现支持在单引号中包装多字符文字。
C11规范中的6.4.4.4/10有关于该主题的更多信息。多字符文字具有int类型和实现定义值。
答案 1 :(得分:1)
它就像书中的打印问题或者你错误地复制了一样。它可能应该是:
std::cout << c1 << ' ' << i1 << ' ' << c2 <<'\n';
' '
是一个空格字符,因此这会在i1
中的数字周围加上空格。它打印:
x 120 x
答案 2 :(得分:0)
首先,您必须了解'a'
和"a"
之间的差异。
'a'
是一个字符文字。它的类型为char
,大多数系统的值为97(字母a
的ASCII / Latin-1 / Unicode编码)。
"a"
是一个字符串文字。它的类型为const char[2]
,指的是包含值char
和'a'
的2 '\0'
个数组。在大多数(但不是全部)上下文中,对"a"
的引用将被隐式转换为指向字符串第一个字符的指针。
两个
cout << 'a';
和
cout << "a";
碰巧产生相同的输出,但出于不同的原因。第一个打印单个字符值。第二个连续打印字符串的所有字符(终止'\0'
除外) - 恰好是单个字符'a'
。
字符串文字可以任意长,例如"abcdefg"
。字符文字几乎总是只包含一个字符。 (您可以使用多字符文字,例如'ab'
,但它们的值是实现定义的,并且它们很少有用。)
(在C中,您没有提及,'a'
的类型为int
,而"a"
的类型为char[2]
(无{{1} }}))。
所以,在你的情况下类型代码如下:const
是一个字符文字。 '<< i1 <<'