关于const的问题!

qhplqhp2004 2010-01-25 12:07:26
const int nCount[] = {1,2,3};
counst int nCount0 = 100;

int nCount1[nCount[1]]= {};//error!------------1
int nCount2[nCount0] ={};//error!--------------2

const int NI = nCount0 + 100;//right??---------3


1 2错误,3是对的?什么原因??有哪位能解析下?我查了下C++思想,它好像是这么解释这个的:
c o n s t可以用于集合,但编译器不能把一个集合存放在它的符号表里,所以必须分配内存。在这种情况下,c o n s t意味着“不能改变的一块存储”。然而,其值在编译时不能被使用,因为编译器在编译时不需要知道存储的内容。

。。。。。。哪位能解释的再清晰点!编译原理学的不是很好!看不懂它的意思!顺便求:比较浅显的编译原理书!高级语言程序员够用就行!指令系统,寄存器之类的搞起来太麻烦了,也没那么多时间学了!就是想知道程序编译过程,编译器做了下什么?对理解起这些指针之类的东西有帮助的东西!各位大虾们有什么建议没?

...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
heguo2chao3 2010-01-26
  • 打赏
  • 举报
回复
不好意思,不是编译前,而是运行时

比如:
const int b=10;//运行前确定,

string str;
for(int i=0;i<10;i++)
str+="a";

const int a=str.size();
要运行时才确定值,因为不运行上面的for循环,你就不知道str的size()到底有多大
qhplqhp2004 2010-01-26
  • 打赏
  • 举报
回复
哪些到编译时确定值,哪些在前就确认值??
heguo2chao3 2010-01-25
  • 打赏
  • 举报
回复
这个和编译原理没有什么关系 就是简单的C++语法
只是数组的array_size只能是常量或者常量表达式,非常量或者常量但是要到编译时才确定值的也不行

如:
const int nCount[] = {1,2,3};
counst int nCount0 = 100; //常量,编译前确定值
const sz=getsize();//常量,编译时确定值
int size=10;//非常量

int nCount1[nCount[1]]= {};//error 常量,编译时才确定值
int nCount2[nCount0] ={};//error,但是不关乎常量应改成int nCount2[nCount0] ={0};
const int NI = nCount0 + 100;//right,可以!
int count3[sz]={0};//error 常量,编译时才确定值
int count4[size]={0};//error,非常量

1,510

社区成员

发帖
与我相关
我的任务
社区描述
Windows专区 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧