[C++语法语义探讨] 请教!!

cutezjun 2007-03-26
在c++/c语言中,常量要不要给分配内存单元阿?
wzgme 2007-03-26
这话要有上下文?描述多点?

一般说,编译时候可以确定求值的,不分配;否则就要。

bigpanda 2007-03-26
问题看的不是很懂。

在Stack里面编译器自动分配,常量要是指针类的话自己要动态分配内存。
spinach 2007-03-28
恩了了
小帽子 2007-05-11
wzgme 写道
这话要有上下文?描述多点?

一般说,编译时候可以确定求值的,不分配;否则就要。



换句话说是不是 定义时不要  赋值时就分配了~
wzgme 2007-05-11
没明白你的意思?

编译器可以自动给你定下的。
bigpanda 2007-05-11
要想对这个问题给出一个完整的,正确的答案,还不是那么容易的事。

C/C++的一个translation unit,由一个个的declaration组成,这些declaration,有的是definition,有的不是。

我现在的假定是definition在run time自动分配内存,declaration不分配。

如extern int a;

这里不分配内存。但是在link时有个translation unit,里面有句
int a;

这里就分配内存了。

C++标准里有一章就讲这个,书在家里,章节数记不起来了.

这个话题值得探讨下去.
qiezi 2007-05-13
既然能称得上“常量”的,自然是在静态数据区,不用绕得这么复杂吧。

能举出一个常量需要在运行期分配的例子吗?
bigpanda 2007-05-14
本来的问题提的是没头没脑。

引用

常量要不要给分配内存单元阿?


既然问题没有提供上下文,那么就得猜。我是这么猜的:

常量涉及到两个概念,delcaration和definition。C++的translation unit是由一个个declaration组成的,有的declaration也是definition,有的不是。

C++标准是这么说的:

引用

A declaration is a definition unless it declares a function without specifying the function's body, it contains the extern specifier or a linkage-specification and neither an initializer nor a function-body, it declares a static data member in a class declaration, it is a class name declaration, or it is a typedef declaration, a using-declaration, or a using-directive.


我估计qiezi的意思是所有的definition都是分配内存的,这点我同意。我想说的是声明一个常量不一定分配内存。

extern int c = 1;  // defines c
extern int c;      // declares c
simohayha 2007-05-14
在c 语言中 定义只能出现在一个地方, 它分配内存,用于创建对象,比如: int arrray[100];

而声明可以多次出现, ,它用于指代其他地方定义的对象,比如 int array[];

声明是不需要分配内存地说.
Global site tag (gtag.js) - Google Analytics