CString GetFile() const;中的const怎么放在后面?

arizona 2001-07-30 04:03:49
...全文
116 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Anaki 2001-08-07
清楚啦!
小子受教!不言谢啦! :P
回复
jy 2001-08-06
类成员函数被执行时,一个this指针被自动隐式的作为第一个参数送给那个函数。例如:
CWinApp* app = AfxGetApp();
app->OnHelpAbout();
这样的序列,当OnHelpAbout()被调用时,实际上app指针被作为真正的第一个参数传递给了它。这意味着OnHelpAbout()中的代码取用数据成员或者CWinApp的其他函数成员时,始终是负责处理的app所指向的CWinApp实例的内容。
这种机制可以被称作隐式传递。

app是可修改目标的指针(非const的),所以,你可以在OnHelpAbout()中修改app对象的成员属性。
反之,如果,OnHelpAbout()被申明成void OnHelpAbout() const;的话,即使app非const。但OnHelpAbout通过隐式传递得到的app指针的副本被自动强制为const类型,这等价于执行了pApp = (const CWinApp const *)app的语句,所以,你不能修改app所指向的实例的成员。
递推之,你不能在其中调用非const类型的成员函数;
进一步,在此理论上,可以推论static void OnHelpAbout() const;的成员申明是无效的,或者,无意义的。因为这时没有this指针被隐式传递。

等等。
回复
Anaki 2001-08-05
to jy:
你的说法(只是指这个函数中可以使用的this指针是const的,结论可以递推)我还没有完全理解,可以给多一点解释么?
回家查书去也! :)
回复
ExitWindows 2001-07-31
up
回复
jy 2001-07-30
其实只是指这个函数中可以使用的this指针是const的,结论可以递推,或者参考azuo_lee的说法。
回复
Anaki 2001-07-30
jeffchen 才答到了点子上,不过还是有办法改的,呵呵!
回复
jeffchen 2001-07-30
说明返回值是一个“常量”,不能对他进行修改
回复
lixiner 2001-07-30
Declaring a member function with the const keyword specifies that the function is a "read-only" function that does not modify the object for which it is called.
To declare a constant member function, place the const keyword after the closing parenthesis of the argument list. The const keyword is required in both the declaration and the definition. A constant member function cannot modify any data members or call any member functions that aren't constant
回复
同意azuo_lee()
回复
azuo_lee 2001-07-30
const关键字用来修饰成员函数,表示该成员函数不能对类的数据成员做改动,同理,它也只能调用其他的const成员函数,而不能调用任何修改数据成员的成员函数。
CArchive的GetFile是const的,但CDocument的GetFile不是const的。
回复
SuperChen 2001-07-30
表示 GetFile 的返回值不能被賦值. 比如 xxxDoc.GetFile()=NULL 是不允許的.
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2001-07-30 04:03
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……