开发者

Friend operator behavior (const vs non-const)

I have the following C++ code:

#include <iostream>

template <class T>
void assign(T& t1, T& t2) {
   std::cout << "First method" << std::endl;
   t1 = t2;
}

template <class T>
void assign(T& t1, const T& t2) {
   std::cout <开发者_StackOverflow< "Second method" << std::endl;
   t1 = t2;
}

class A {
   public:
      A(int a) : _a(a) {};
   private:
      int _a;
      friend A operator+(const A& l, const A& r);
};

A operator+(const A& l, const A& r) {
   return A(l._a + r._a);
}

int main() {
  A a = 1;
  const A b = 2;

  assign(a, a);
  assign(a, b);
  assign(a, a+b);
}

The output is:

First method
Second method
Second method

The output stays the same even if I comment out the the first 2 assigns in the main function.

Can someone please explain to me why the operator+ returns a const A?

The output is the same in both Linux Debian 64bit and Windows 7 64 bit.


It doesn't return a const A at all. It returns a temporary A, which may only bind to a const reference.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜