关于const的问题?分不够再加。

古布 2004-04-03 12:43:25
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怎么解释?能举个例子吗?
...全文
92 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdslhr 2004-04-04
  • 打赏
  • 举报
回复
在用动态连接库时,当要生成.DLL文件时,有的书上说要加入.def文件,不知.def文件怎么生成呀???
5420 2004-04-04
  • 打赏
  • 举报
回复
倒数第三楼的那句"所以 const int i = 10; 和 int = 10都是正确的。"
可能是这样的"所以 const int i = 10; 和 int i = 10都是正确的。"
5420 2004-04-04
  • 打赏
  • 举报
回复
区分指针常量和指向常量的指针的小窍门归纳:
格式:(类型) * [const] 指针名
说明:指向(类型)的指针[常量]

jinone 2004-04-04
  • 打赏
  • 举报
回复
楼上
const int i = 10; 和 int = 10都是正确的。
这是什么意思呀?
Atomictry 2004-04-04
  • 打赏
  • 举报
回复
我觉得可以这样理解比较简单。
f()可以认为是一个常量,例如10。
所以 const int i = 10; 和 int = 10都是正确的。
jinone 2004-04-04
  • 打赏
  • 举报
回复
按位const怎么解释?举个例子?

按位const, 也就是bitwise const,其实应该就是const X x();X 是某一个类,这或许就是针对按成员const,也就是memberwise const或logical const, 的一种提法!
如果是按位const的话,那么一个成员函数就不大可能改变数据成员!
而按成员const话,则应该有至少有三种方法来修改数据成员!

angelo23 2004-04-03
  • 打赏
  • 举报
回复
1)f()返回的是一个指向常量的指针,所以用一个指向常量的指针(e.g., const int*)即可,至于这个指针是不是const的,那无所谓。注意指向常量的指针和常量指针的区别,以int为例,前者是const int*,后者是int * const,而指向常量的常量指针则是const int * const,就像你用的那个ccpi
2)这个常量可能在编译时就被替换掉,也可能不被替换掉。你都已经写了const了,编译器当然知道它是const的,所以你既不可以修改它,也不可以用一般的指针指向它,必须用指向常量的指针指向它
3)按位const是甚?
sharkhuang 2004-04-03
  • 打赏
  • 举报
回复
函数也是const的!编译的时候地址就固定了!
lxh1010 2004-04-03
  • 打赏
  • 举报
回复
完全同意w3guy的
cgsw12345 2004-04-03
  • 打赏
  • 举报
回复
www.kubou.y365.com ^_^
古布 2004-04-03
  • 打赏
  • 举报
回复
按位const 在c++编程思想中有!
w3guy 2004-04-03
  • 打赏
  • 举报
回复
区分指针常量和指向常量的指针的小窍门:
const int *p; // 指向常量的指针:指针可修改,指针所指的内容不能修改
int * const p; // 指针常量:指针不可修改,指针所指的内容可以修改
const int* const p; //指向常量的指针常量,指针和指针所指的内容都不能修改

区分方法,将定义从*号分成两部分,如果变量类型和const 在同一边是指向常量的指针,如果变量类型和const 不在同一边是指针常量,如果两边都有是指向常量的指针常量。

const int* cpi = f() 能通过是因为cpi 是指向常量的指针(不是因为它是指针常量)
然而 int * const cpi = f() 就不能通过,因为此时cpi 是指针常量,一个指向常量的指针是不能赋给它的。
xspspring 2004-04-03
  • 打赏
  • 举报
回复
“ const int* cpi = f(); // 也通过。因为cpi是指针常量 ”

不是吧??
sharkhuang 2004-04-03
  • 打赏
  • 举报
回复
没有说不能把const 值付给非const啊!

只是const不能当左值!意思是不能被负值.
zhouqingyuan 2004-04-03
  • 打赏
  • 举报
回复
1,常量当然可以赋给一个非常量变量啊,
只是一个变量不能被赋给一个常量(const修饰)
2。因为有const修饰,所以编译器就把它编译成常量,
一直存储在一个单独的地方,不编译就不改变的。
3。没有听说过,只听过什么按位拷贝,
eboywy 2004-04-03
  • 打赏
  • 举报
回复
2,好像是放在静态内存区。
3,??
eboywy 2004-04-03
  • 打赏
  • 举报
回复
1)
const int* const f()
{
static int i;
return &i;
}


f()返回的是一个指向常量的指针常量。


const int* const ccpi = f(); // 通过。因为也ccpi也是指向常量的指针常量
const int* cpi = f(); // 也通过。因为cpi是指针常量

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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