比较特殊的运算符重载

caddor 2012-01-30 05:58:34
比较特殊的运算符重载:


class Sample
{

int *p;

public:
operator int*()
{
return p;
}
};

重载了int* , 这种函数感觉很怪异, 函数返回值,函数名是什么??

operator int*() const
{
return p;
}

它的 函数返回值,函数名是什么??


...全文
94 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
caddor 2012-01-30
  • 打赏
  • 举报
回复

多谢了





[Quote=引用 7 楼 we_sky2008 的回复:]

引用 5 楼 caddor 的回复:
前辈,在请教个问题,我对这个问题,查了一些资料,都没有彻底理解

void f2() {....}

以下都是对的:

(&f2)();

(*f2)();

(****************************f2)();

(****************************&f2)(……
[/Quote]
we_sky2008 2012-01-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 caddor 的回复:]
前辈,在请教个问题,我对这个问题,查了一些资料,都没有彻底理解

void f2() {....}

以下都是对的:

(&f2)();

(*f2)();

(****************************f2)();

(****************************&f2)();

(&*f2)();

按照 is……
[/Quote]
函数名是比较特殊的东西,可能语言本身在设计时考虑到函数名与函数指针读写习惯与方便性就设计为这样了
所以,这可能不再是语法问题,而是规定了,具体我也没考虑过,楼主可以查阅下标准文档

所以,你前面的那些理解正确与否还是要参考标准文档,
但是“对于:(&f2)() 是f2转成函数指针,然后&f2取函数之指针的地址。。。。然后。。。。”
这句话我觉得是有问题的,函数名本身是一个左值,所以在取其地址之前函数名并不会转换为函数指针,很简单的原因,如果在取其地址之前函数名转换为函数指针,那么再取其地址之后,表达式的类型将会是void(**)(); 将不能作为函数指针来调用,

独自听枫 2012-01-30
  • 打赏
  • 举报
回复
自定义转换,不算特殊,只是少用
caddor 2012-01-30
  • 打赏
  • 举报
回复
前辈,在请教个问题,我对这个问题,查了一些资料,都没有彻底理解

void f2() {....}

以下都是对的:

(&f2)();

(*f2)();

(****************************f2)();

(****************************&f2)();

(&*f2)();

按照 iso中提供的资料说是:

普通函数调用:跟着括号的后缀表达式。

调用的时候,后缀表达式转换为函数指针。

比如: (*f2)() 是指 f2转成函数指针吗? *f2又指函数名字,然后*f2再次转为函数指针。。。

转了两次, 是不是这样理解???

对于:(&f2)() 是f2转成函数指针,然后&f2取函数之指针的地址。。。。然后。。。。

我肯定理解有问题

能帮忙纠正一下吗








[Quote=引用 2 楼 we_sky2008 的回复:]

引用 1 楼 we_sky2008 的回复:
这是自定义的转换函数
楼主翻下书吧,书中讲的很清楚

看下《c++ PRIMER》或者《MORE EFFECTIVE C++》Item M5:谨慎定义类型转换函数
[/Quote]
caddor 2012-01-30
  • 打赏
  • 举报
回复
我不觉的要慎用啊

比如:CString 中就用了

operator LPCTSTR() const




[Quote=引用 2 楼 we_sky2008 的回复:]

引用 1 楼 we_sky2008 的回复:
这是自定义的转换函数
楼主翻下书吧,书中讲的很清楚

看下《c++ PRIMER》或者《MORE EFFECTIVE C++》Item M5:谨慎定义类型转换函数
[/Quote]
ybxuwei 2012-01-30
  • 打赏
  • 举报
回复
强制转换函数,把Sample转化为int*类型
int *p = (int*)Sample;
we_sky2008 2012-01-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 we_sky2008 的回复:]
这是自定义的转换函数
楼主翻下书吧,书中讲的很清楚
[/Quote]
看下《c++ PRIMER》或者《MORE EFFECTIVE C++》Item M5:谨慎定义类型转换函数
we_sky2008 2012-01-30
  • 打赏
  • 举报
回复
这是自定义的转换函数
楼主翻下书吧,书中讲的很清楚

64,680

社区成员

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

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