std::cout<< ' ' <<std::endl; 输出一个数字,为什么?

4

我刚接触C++,想了解为什么我运行以下代码后会得到A2105376B

#include <iostream>
int main(){

  std::cout <<'A' << '   ' <<'B'<<std::endl;
  return 0;

}

提前感谢!


1
请注意,C++并不“保证”您会得到该输出。 - cigien
1个回答

6

' '是一个多字节字符字面值,具有int类型和实现定义的值。

看起来你可能意味着一个单字节字符字面值' '或一个字符串字面值" "

参考C++标准(2.13.3字符字面值)

2 不以u8, u, U 或者 L开始的字符字面值是一个普通的字符字面值。如果一个普通的字符字面值所包含的c-char可以在执行字符集中表示, 那么它的类型为char,并且它的值等于该c-char在执行字符集中的编码的数值。如果一个普通的字符字面值包含多个c-char,则它是一个多字符 字面值。一个多字符字面值或者一个包含一个不能在执行字符集中表示的单一c-char的普通字符字面值是有条件支持的,具有int类型,并有 一个实现定义的值。

这里是一个演示性程序,如果用三个空格的ASCII值初始化整数对象,则输出该对象。

#include <iostream>

int main() 
{
    int x=  0x202020;

    std::cout << x << '\n';
    std::cout << '   ' << '\n';

    return 0;
}

程序输出为:
2105376
2105376

1
你能详细说明一下这个值可能是什么样的吗?它是如何转换为整数的?或者说它是如何解释的?只是为了我自己的理解。 - Waqar
2
嗯,@Waqar只是试着进行一次心理实验,尝试包装你的大脑,了解我们人类如何将单个数字4、6和8组合成一个数字468。这里的情况也是一样的,只不过数字是单独的字节,每个字节可以有256个不同的值,而不是十个不同的值,因为每个字符只是一个字节。除了256个值而不是10个值之外,底层的数学是相同的。 - Sam Varshavchik
1
@SamVarshavchik:但这只是一种可能的实现。始终返回42也是有效的… - Jarod42
1
@Waqar 请查看我的更新帖子。 - Vlad from Moscow
非常感谢 @VladfromMoscow! - Alih3d
@Alih3d 完全没有问题。欢迎您。:) - Vlad from Moscow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接