none
请教一个C++问题 RRS feed

  • 问题

  • class A

    {

    A(int i){....}

    bool operator==(A a){ .....}

    };

     A a1(2);

    a1==3;\\succeed

    如果改bool operator==(A a){ .....}

    为bool operator==(A &a){ .....},即变为引用,

    a1==3\\error

    为什么不能改为引用。谢谢解答

    2016年4月12日 16:23

全部回复

  • 修改成这样试试:
    bool operator==(const A& a) { ... }

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2016年4月13日 1:13
    版主
  • 楼上的方案是正确,我已经验证过了在Visual Studio2015上面,另外,你可以这么改一下,也是可以编译通过的,如下:

    a1 ==(A)4;

    如果你的问题已经得到解决,请mark帖子。

    2016年4月13日 2:06
    版主
  • http://stackoverflow.com/questions/2949976/why-must-you-provide-the-keyword-const-in-operator-overloads 这个帖子讨论了很多关于你的疑问

    其实并没有很强制的限制,主要在于你的实现中是否会改变引用的值,但是你在你的 == 重载中肯定要调用本身 int 的 == 重载,这就导致了对 &a的成员的取值,需要保证 &a 为const 

    std 标准库里对于 == 的符号是有const限制的


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2016年4月13日 5:46
  • 楼上的方案是正确,我已经验证过了在Visual Studio2015上面,另外,你可以这么改一下,也是可以编译通过的,如下:

    a1 ==(A)4;

    如果你的问题已经得到解决,请mark帖子。


    这里使用了匿名临时变量,当然就没问题了。不过写法很怪异,为什么要用强制类型转换来构造呢?一般都是a1==A(4)这样吧?

    a1==A(4)这种写法我没用过; 我那种写法,就是类型强制转换的写法,如果你要强制转换指针类型,我那种写法,看着应该清楚,方便理解一些。

    2016年4月13日 8:17
    版主
  • (A*)的理解是对的,

    >>匿名临时变量的构造

    你的意思是在赋值阶段,进行了一次了匿名的构造? 

    其实函数的形参列表是引用,就是为了防止进行一次构造。但是对于加上const关键字,可能是防止右操作数发生变化,右操作数只是可读的。

    2016年4月13日 8:35
    版主