神奇C++问题(2)

HaoGeGe 2001-05-16 12:34:00
将x声明为什么可以让这条语句打印出Success

if (x == &x) cout << "Success\n";

...全文
120 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
holyfire 2001-05-16
  • 打赏
  • 举报
回复
look
holyfire 2001-05-16
  • 打赏
  • 举报
回复
给分罗
HaoGeGe 2001-05-16
  • 打赏
  • 举报
回复
哈哈,连&也搞定了,算你狠.
babysloth快看看问题4吧.
babysloth 2001-05-16
  • 打赏
  • 举报
回复
您的方法当然对,不过我的方法也达到目的了,怎么算错,呵呵。
上面的X也可以写成下面这样,不过麻烦一点,但是原理不同。
class X{
private:
int a;
public:
bool operator ==(const X& v) {return a==v.a;}
X operator &() {return *this;}
};
holyfire 2001-05-16
  • 打赏
  • 举报
回复
精彩!
HaoGeGe 2001-05-16
  • 打赏
  • 举报
回复
这样做都不对.
如同babysloth所做的
x 是 void *类型
&x 是 void **类型
所以不得不进行reinterpret_cast
答案在the ISO C++ standard的4.3节中

"An lvalue of function type T
can be converted to an rvalue of type 'pointer to T'.
The result is a pointer to the function."

所以答案应该是
void x();
if (x == &x) cout << "Success\n";




holyfire 2001-05-16
  • 打赏
  • 举报
回复
这两个方法我都想到了,还有没有呢?
holyfire 2001-05-16
  • 打赏
  • 举报
回复
加上20分,不好意思,最近分比较少
babysloth 2001-05-16
  • 打赏
  • 举报
回复
其实答案很多了,还可以这样。
class X
{
public:
template <class T>
bool operator ==(const T&) {return true;}
};

然后声明X x;那也可以。
santaga 2001-05-16
  • 打赏
  • 举报
回复
错了错了
holyfire 2001-05-16
  • 打赏
  • 举报
回复
babysloth(小懒虫虫)是对的。
santaga 2001-05-16
  • 打赏
  • 举报
回复
int** x
babysloth 2001-05-16
  • 打赏
  • 举报
回复
void *x = &x;

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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