分类：电脑/网络-程序设计
问题：一个关于枚举的内存分析。#include&lt;iostream 
#include <iostream>using namespace std;enum clour {red,blue,yellow};void main(){  int blue=5;  clour c=(clour)blue;  cout<<c;}这是以上的测试程序，输出 c=5。enum clour {red,blue,yellow};这句现在里分配了3个空间，分别是red,blue,yellow，他们的值分别是0，1，2.int blue=5;这句是把之前枚举中的blue覆盖，变成了5.#include <iostream>using namespace std;enum clour {red,blue,yellow};void main(){  int blue=5;  clour c=(clour)blue;  cout<<c;}这是以上的测试程序，输出 c=5。enum clour {red,blue,yellow};这句现在里分配了3个空间，分别是red,blue,yellow，他们的值分别是0，1，2.int blue=5;这句是把之前枚举中的blue覆盖，变成了5.clour c=(clour)blue;这句是把C的值付成，值为5的枚举常量。也就是blue。cout<<c;最后输出C。这是我对这个程序的理解。但是老师说int blue与枚举中的blue不一样，我试了试，如果把int blue=5;换成char blue=5;执行结果还是C=5。好像用我刚才的解释有点说不通，因为一个char型数据好像没法覆盖枚举中的值。求高人给分析一下这个程序到底是怎么回事。最好是从内存的角度，我觉得这样可能可以清晰一点。
回答：两方面问题1：int blue 中的blue和枚举中的的确不是一个，也不存在覆盖的问题，枚举blue 是一个常量，不会被改变，不在栈区分配空间，而变量blue是在栈区分配变量空间，因此，枚举blue不能查看内存地址，即，不能&blue，而变量可以。2：之所以会发生看似枚举量blue的值被改变时由于命名重复，形象一点就是你在一个全局里面命名了一个全局常量，有命名了相同名字的局部变量，局部当然会屏蔽全局的作用了。如果用命名空间来区分，可以很容易解决上述问题，也很容易理解两个blue的区别。下面简单程序进行测试验证：#include <iostream> using namespace std; namespace Xiaoen{enum clour {red,blue,yellow};} void main(){   cout<<"Design by 小恩"<<endl;  cout<<"Xiaoen::blue:  "<<Xiaoen::blue<<endl;  int blue=5;   cout<<"After int blue=5"<<endl;  Xiaoen::clour c=(Xiaoen::clour)blue;   cout<<"c="<<c<<endl;  cout<<"Xiaoen::blue:  "<<Xiaoen::blue<<endl;  cout<<"int blue: "<<blue<<endl;} 运行结果：Design by 小恩Xiaoen::blue:  1After int blue=5c=5Xiaoen::blue:  1int blue: 5Press any key to continue由此也可以理解C++里面命名空间的实用性。个人愚见，欢迎指正。