关于const的问题?分不够再加。
1)
const int* const f()
{
static int i;
return &i;
}
const int* const ccpi = f(); // 通过。
const int* cpi = f(); // 也通过。为什么?
2) // aa.h
const int i = 10; // 在编译期间这个符号常量存在哪里?
//关于i是const修饰的信息存在哪里?
// 编译器怎么知道它有const修饰
3)按位const怎么解释?能举个例子吗?
问题点数:50、回复次数:17Top
1 楼angelo23(angelo)回复于 2004-04-03 12:52:02 得分 15
1)f()返回的是一个指向常量的指针,所以用一个指向常量的指针(e.g., const int*)即可,至于这个指针是不是const的,那无所谓。注意指向常量的指针和常量指针的区别,以int为例,前者是const int*,后者是int * const,而指向常量的常量指针则是const int * const,就像你用的那个ccpi
2)这个常量可能在编译时就被替换掉,也可能不被替换掉。你都已经写了const了,编译器当然知道它是const的,所以你既不可以修改它,也不可以用一般的指针指向它,必须用指向常量的指针指向它
3)按位const是甚?Top
2 楼eboywy(飞影)回复于 2004-04-03 13:40:51 得分 5
1)
const int* const f()
{
static int i;
return &i;
}
f()返回的是一个指向常量的指针常量。
const int* const ccpi = f(); // 通过。因为也ccpi也是指向常量的指针常量
const int* cpi = f(); // 也通过。因为cpi是指针常量
Top
3 楼eboywy(飞影)回复于 2004-04-03 13:41:36 得分 0
2,好像是放在静态内存区。
3,??Top
4 楼zhouqingyuan(浪帆)回复于 2004-04-03 13:54:52 得分 10
1,常量当然可以赋给一个非常量变量啊,
只是一个变量不能被赋给一个常量(const修饰)
2。因为有const修饰,所以编译器就把它编译成常量,
一直存储在一个单独的地方,不编译就不改变的。
3。没有听说过,只听过什么按位拷贝,
Top
5 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2004-04-03 14:39:04 得分 5
没有说不能把const 值付给非const啊!
只是const不能当左值!意思是不能被负值.Top
6 楼xspspring(辛巴)(坚持学习:奋斗:锻炼身体—超越自我:)回复于 2004-04-03 15:11:39 得分 0
“ const int* cpi = f(); // 也通过。因为cpi是指针常量 ”
不是吧??
Top
7 楼w3guy(何去何从)回复于 2004-04-03 15:15:16 得分 10
区分指针常量和指向常量的指针的小窍门:
const int *p; // 指向常量的指针:指针可修改,指针所指的内容不能修改
int * const p; // 指针常量:指针不可修改,指针所指的内容可以修改
const int* const p; //指向常量的指针常量,指针和指针所指的内容都不能修改
区分方法,将定义从*号分成两部分,如果变量类型和const 在同一边是指向常量的指针,如果变量类型和const 不在同一边是指针常量,如果两边都有是指向常量的指针常量。
const int* cpi = f() 能通过是因为cpi 是指向常量的指针(不是因为它是指针常量)
然而 int * const cpi = f() 就不能通过,因为此时cpi 是指针常量,一个指向常量的指针是不能赋给它的。
Top
8 楼banquet(Everything will be well)回复于 2004-04-03 16:54:21 得分 0
按位const 在c++编程思想中有!Top
9 楼cgsw12345(cgsw)回复于 2004-04-03 17:20:17 得分 0
www.kubou.y365.com ^_^Top
10 楼lxh1010(匿迹)回复于 2004-04-03 17:42:18 得分 0
完全同意w3guy的Top
11 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2004-04-03 18:24:23 得分 0
函数也是const的!编译的时候地址就固定了!Top
12 楼jinone()回复于 2004-04-04 15:40:06 得分 5
按位const怎么解释?举个例子?
按位const, 也就是bitwise const,其实应该就是const X x();X 是某一个类,这或许就是针对按成员const,也就是memberwise const或logical const, 的一种提法!
如果是按位const的话,那么一个成员函数就不大可能改变数据成员!
而按成员const话,则应该有至少有三种方法来修改数据成员!
Top
13 楼Atomictry(天影)回复于 2004-04-04 17:31:48 得分 0
我觉得可以这样理解比较简单。
f()可以认为是一个常量,例如10。
所以 const int i = 10; 和 int = 10都是正确的。Top
14 楼jinone()回复于 2004-04-04 17:40:24 得分 0
楼上
const int i = 10; 和 int = 10都是正确的。
这是什么意思呀?Top
15 楼5420(薰衣草)回复于 2004-04-04 18:39:33 得分 0
区分指针常量和指向常量的指针的小窍门归纳:
格式:(类型) * [const] 指针名
说明:指向(类型)的指针[常量]
Top
16 楼5420(薰衣草)回复于 2004-04-04 18:48:11 得分 0
倒数第三楼的那句"所以 const int i = 10; 和 int = 10都是正确的。"
可能是这样的"所以 const int i = 10; 和 int i = 10都是正确的。"Top
17 楼wdslhr(我爱西湖)回复于 2004-04-04 21:28:23 得分 0
在用动态连接库时,当要生成.DLL文件时,有的书上说要加入.def文件,不知.def文件怎么生成呀???Top




