为什么 C++ 不定死 bool 的大小?char 为何有三种?double 类型字面量如何书写?标识符命名规则有哪些? 您所在的位置:网站首页 vs未定义标识符bool 为什么 C++ 不定死 bool 的大小?char 为何有三种?double 类型字面量如何书写?标识符命名规则有哪些?

为什么 C++ 不定死 bool 的大小?char 为何有三种?double 类型字面量如何书写?标识符命名规则有哪些?

2022-12-08 10:22| 来源: 网络整理| 查看: 265

我可能就是你所说的 “github上那个人”,所以不邀自来,试着回答一下。

1. 所有C++中类型,必须 addressable 的。你说为何不是 1 bit,试着想想你如何用指针去指向 1 bit ? 你至少也只能指向 1 byte (8bit). 所以, 1 byte 才是最小可接受的尺寸。bool 只有两个值,true or false, 按理说 1 bit 就够了,但因为上面的原因,至少也要 1 byte, 但因为 CPU 的架构各有不同,有些处理 4 byte 要比 1 byte 还快,所以 C++ 标准里才向来没有对 bool 的 size 做硬性要求,取决于编译器的优化策略。GCC 上可能 size 为 1 byte (与 char 一致), 到 VS 上可能就是 4 byte (与 int 一致)。

2. 实际上 char 也只有两种表现形式:signed 和 unsigned. 而(plain) char 为依照编译器的具体实现来确定自己到底是 signed 还是 unsigned. 出于跟第一个问题类似的考虑,char 的不确定性也是因为不同平台不同机器的策略而形成的。(实际上,如果没有 signed char 这个类型, signed 关键字甚至都没有太多理由存在了。见我的另一篇小文 被人忽略的 signed 关键字)

以上两个问题,实际上都是对于 C++ 标准中的一些规定的疑问,如果说标准是 C++ 语言的边界,那么你问为什么标准这样规定,就超出了 C++ 语言的范畴,需要学习编译原理体系结构,甚至操作系统,去进一步了解。

3. 默认都是 double。这个书上原话,(抱歉,我没有中文版):

3.14159 3.14159E0 0. 0e0 .001 By default, floating-point literals have type double.

你说有答案写了 float , 请问具体哪道题?如果针对习题答案有疑问,可以直接发 Issue。

4. 这个问题可以参考 关于C++中的下划线? 看起来是翻译错误。因为英文版说的是:

In addition, identifiers defined outside a function may not begin with an underscore.

只能说,那样做不是一个好习惯。但并不意味着那不合法。这一小节开头就有这句话:

Identifiers in C++ can be composed of letters, digits, and the underscore character.

所以那道题是被认为合法的。

你看书看的非常细致,以后有疑问去 GitHub 上提,如果习题答案有疏漏的地方,希望也能贡献你的力量。谢谢~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有