首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

Effective C++中的一句话,不理解,该怎么处理

2013-01-02 
Effective C++中的一句话,不理解const double Aspectratio 1.653 作为一个语言常量,AspectRatio肯定会

Effective C++中的一句话,不理解
const double Aspectratio = 1.653 ;
作为一个语言常量,AspectRatio肯定会被编译器看到,当然就会进入符号表内。另外对浮点常量(如本例),使用常量可能比使用#define导致较小量的码,因为预处理器“盲目地将宏名称ASPECT_RATIO替换为1.653”可能导致目标码出现多份1.653,若改为常量AspectRadio绝不会出现相同情况。

问题描述:
我们知道:默认情况下编译器不会为定义的常量分配内存, 编译时会替换常量出现的地方, 也就是常量折叠。那么, 我觉得const默认情况和#define定义的宏效果是一样的, 都是替换, 但为什么书中说不会出现多份的1.653呢?
[解决办法]
define 有可能直接替换为指令的立即数,多次使用同一个宏,有可能多次出现同一个立即数,const 不会。
[解决办法]
VC调试时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?

[解决办法]
例1 #define N 2+2

void main()

{

   int a=N*N;

   printf(“%d”,a);

}

例2  #define area(x) x*x

/*这在使用中是很容易出现问题的,看如下的程序*/



void main()

{

    int y = area(2+2);

    printf(“%d”,y);

}


这2例子应该可以让你进一步理解宏机制
[解决办法]

引用
 That's because the preprocessor's blind substitution of the macro name ASPECT_RATIO with 1.653 could result in multiple copies of 1.653 in your object code, while the use of the constant AspectRatio should never result in more than one copy. 
object coe
object 文件中啊,不是内存中。
[解决办法]
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

[解决办法]
引用:
请看下面的说发, 对不对?

楼主也不要纠结了吧。看你把const理解成什么样了!不对不对。
初学就不要停留在细节了。

热点排行