const在c和c++中的区别

来源:互联网 发布:淘宝发布产品 编辑:程序博客网 时间:2024/05/21 22:35

error: variable-sized object may not be initialized

const在C,尤其是C++,是个老生常谈的问题,但这里不谈const具体有哪些特性,如何使用,而是说说const在C和C++中的区别。

编译器,C使用gcc,C++使用g++,其它编译器(cl等)请自行验证。在我的印象中,const就是常量(constant)。但这并不是真的。

在C中,const仅仅表示其所修饰对象不可修改。常量和所谓“不可修改”有什么区别呢?C中,const int N = 10; 这样的语句声明了一个整型数据,声明之后你不能再为其赋值,此即为不可修改。但在C中,N却不是常量,而诸如372, 3.72, ‘A’之类才是常量,在C中定义常量通常使用#define。而在C++中,const int N = 10; 就会定义N为常量。  

怎么证明呢?你可能知道,定义静态数组,必须使用整型常量指定其大小,那咱们就用这个特性来验证上面描述的观点。

int main(int argc, char **argv)

const int N = 10; 

int a[N] = { 1, 2, 3 }; 

return 0;

}  

使用g++编译这个程序,没有问题。但若使用gcc,你会得到如下错误信息:

main.c: In function ‘main’:main.c:19: 

error: variable-sized object may not be initializedmain.c:19: warning: excess elements in array initializer    但事情并未到此结束,如果你把上面代码中int a[N] = { 1, 2, 3 };的初始化列表去掉,即int a[N]; 然后就也能通过gcc的编译,更有甚者,如果你把const int N = 10;的const去掉:int N = 10; 也能通过gcc的编译!这是gcc所支持的特性,即动态数组。但最好不要这样做,因为gcc会为此生成大量代码。

0 0