书中这样说:“c++提供了大量的整形,应使用那种类型呢?通常,int被设置为对目标计算机而言最为”自然“的长度,”
这句话怎么理解??
被谁设置的呢?
计算机不是书呆子设计的,你也不能用书呆子的方式学习。
为什么早期编译器的int值随着编译器产生代码的延长而延长,这是考虑到对原有的程序,不加修改,就可以自然获得更好的性能。
为什么现在的编译器又不遵循这个规则了,是因为出于向前兼容的需要。作为一种语言,数据类型随意变化是不好的。特别是32bit编译器存在了将近20年的时间。
比如说分配内存,很多人已经习惯了将int当作4字节使用了。历史包袱在那里。如果编译器将int升级到64bit,一些老的程序就会引入bug。
这句话说的不严谨。
在历史上,C语言的int类型长度和编译器(不是目标操作系统)产生的代码是相关的。比如turbo c的int是16bit,而turbo c产生16bit的代码。
但是这其实没有任何必然的关系。并且,为了向前兼容的需要,现在int表示32bit整数已经成为现代x86编译器的共识。
比如VC++,其x64编译器,产生64bit的代码,但是int还是64bit的。
总之,编译器对于int到底是8位 16位还是 32位,或者64位,有它历史的和现实的考量,这个没有任何规律可以说。
从现代编程语言的角度看,一个数据类型随着编译器生成代码的不同而不同简直就是胡闹。
或者说,在当初,C++的设计者决定把16bit编译升级到32bit的时候,决定改变int的长度,绝对是一种自作聪明的很二的做法。这和计算机发明之初决定使用2位数字表示日期,结果搞出千年虫问题是一个道理。
不要忘记C++,甚至为了保持和C的兼容,其实它还在愚蠢地遵循40年前的设计,虽然很多现在看来无比荒谬。现在的计算机、我们需要的软件早就完全不同了。