请问下面两句的实质区别,还有为什么作为数组维度会报错。
const int a = 1;
const int& a = 1;
const int a = 1;
int b[a]; // 正确
const int &a = 1;
int b[a]; // 错误:“表达式必须含有常量值”
const int a = 1; 相当于a的值在编译的时候会替换为1
int b[a];
相当于
int b[1];
而const int &a = 1;
a还是变量,只是这个变量不允许修改(编译器保证)
而int b[变量]是否合法这个取决于你的编译器。
对于gcc,这是成立的,对于vc++,这个不允许。
int &a=1;直接不合法。
如果是
int a=1;
const int &b=a;
int c[b];
那么是因为b是a的引用,而a本身不是常量,所以不合法。
const int a = 1; <---,a是标准变量
const int& a = 1,<---&a 表示a的地址,‘a’是1的引用。
故,int b[a] 错误
const int a = 1; 中的a是const int型的常量
const int& a = 1;中a是const int&型的常量,一般情况下,系统是不让读取a内存中的值,所以调用int b[a];这句话会出错
值得一提的是,int& a ;中的a表示取a的地址,而这个地址是int型的,如果要想赋值,一般用某地址赋值
数组是长度必须是常量或者具体的整形,因为编译器必须在编译的时候,就要直到要为他分配多少空间。
const int a = 1;
是定义一个整型常量。
const int & a = 1;
是一个常引用,并不是一个常量。
const定义必须是常量,常量是不能改变的;
&a是引用,是个变量。
&a是引用,是个变量。
数组长度不可以是个变量