[cpp] nonoverloadable operators
李慧霸
magazine.lihuiba at 163.com
Mon Apr 2 17:32:13 CST 2007
>>> .* 不可重载,->* 就可以重载吗?
>>> .* 有什么用?
>>>
>> .*和->*是用于 8220;指向成员变量/函数的指针 8221;解引用时的语法。
>> 在最简单的情况下,指向成员的指针被实现为一个类内偏移,需要配合一个对象实例才能解引用。
>> 在多继承环境下,这种指针的实现会很复杂,因编译器不同而迥异。
>>
>> 设T是一个类(结构体),mp是指向T的一个成员的指针,,例如:
>> T Obj;
>> T* pObj=&Obj;
>> ...
>> 则 8220;Obj.*p 8221;、 8220;pObj->*p 8221;分别是两种解引用的语法。
>>
>我不知道将".*"理解为解引用是否正确。
>但我认为用解引用来解释至少会与普通指针的解引用相混淆。
>因为你不能将 Ojb.*p 写为 Ojb.(*p), 或者加空格为 Ojb. *p, 或者将*号提前
>*Obj.p.
>因为.*合在一起才是一个操作符,操作数是一个成员指针。
>注意:p是指向类成员的指针,不是普通指针。
我觉得 8220;指向成员的指针 8221;也是一种指针,只不过不是通常意义的指针,并且不常用罢了。
就像核武器也是一种武器,只不过不是常规武器,并且不常用罢了。
所以可以认为 8220;.* 8221;和 8220;->* 8221;就是此类指针的解引用运算符。
个人理解罢了,人人都可以有自己的观点。
------------------
李慧霸
2007-04-02
More information about the Cpp
mailing list