std :: cout使用' ' implitations - 不理解输出

时间:2017-07-14 01:16:24

标签: c++ casting operators std stdout

我是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(我的眼睛不能从印刷品中找出差异),但事实并非如此。

3 个答案:

答案 0 :(得分:1)

单引号用于环绕 一个字符文字。像:

'A' 'C' 'x' ' ' '5' etc.

单引号'并不意味着包围字符串文字(由多个字符文字组成),因此这样做是错误的:

`Hello World`

或者在你的情况下:

'<< i1 <<'

所以经验法则是:当使用单引号'a'将char文字环绕时,处理字符串文字时用双引号括起来:"Some string 123"。 如果您只是尝试打印出i2变量,请使用:

std::cout << c1 << i1 << c2 << '\n';

<强>更新 规则有例外。一些实现支持在单引号中包装多字符文字。

  

多字符文字具有int类型和实现定义值。

C11规范中的6.4.4.4/10有关于该主题的更多信息。

答案 1 :(得分:1)

它就像书中的打印问题或者你错误地复制了一样。它可能应该是:

std::cout << c1 << ' ' << i1 << ' ' << c2 <<'\n';

' '是一个空格字符,因此这会在i1中的数字周围加上空格。它打印:

x 120 x

DEMO

答案 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 <<'