关于CObList::GetHead()函数声明的若干技术疑问
关于CObList::GetHead()函数声明的若干技术疑问
Hey there! Let's unpack this function declaration and answer all your questions one by one:
1. 为什么函数声明里会有CObList::前缀?
你的观察非常到位!在官方文档(比如你查看的MFC类参考)里,给函数加上类名+::的限定符,是为了明确这个函数所属的类,避免歧义——毕竟不同类可能会有同名的GetHead()方法,用限定符能直接指明我们讨论的是哪一个。
而在类的.h头文件里,因为已经处于类的定义作用域内了,所以不需要重复CObList::前缀,直接写CObject*& GetHead() const;就可以。
2. CObject*&是函数的返回类型吗?
没错!这是指向CObject的指针的引用。你熟悉的是参数使用引用,但C++里函数也可以返回引用类型。
这个返回类型意味着什么?当你调用GetHead()时,得到的是列表头部存储的指针的直接引用。举个例子:
CObList myList; // ... 往列表里添加元素 ... CObject*& pHeadObj = myList.GetHead(); pHeadObj = new CMyObject(); // 这会直接修改列表头部存储的指针
3. 这里的const关键字有什么作用?
函数参数列表后的const表示这是一个const限定的成员函数,核心含义有两点:
- 你可以在
const CObList实例上调用这个函数(如果函数没有const限定,就不能在const对象上调用它)。 - 这个函数承诺不会修改调用它的
CObList对象的任何成员变量(不会改变列表的结构或内部状态)。
不过这里有个MFC旧设计的小矛盾:const函数却返回了非const的指针引用,这在现代C++里通常会改为返回const CObject*&来保证const正确性,但MFC为了向后兼容保留了这个签名。
备注:内容来源于stack exchange,提问作者Léa Massiot
相关产品推荐
相关产品推荐

