Поведение оператора друга (const против non-const) - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть следующий код C ++:

#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 << "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);
}

Вывод:

First method
Second method
Second method

Вывод остается прежним, даже если я закомментирую первые 2 assign с в функции main.

Может кто-нибудь объяснить мне, почему operator+ возвращает const A?

Вывод одинаков как в Linux Debian, 64-битной, так и в Windows 7, 64-битной.

1 Ответ

8 голосов
/ 26 сентября 2011

Не возвращает const A вообще. Возвращает временную A, которая может привязываться только к ссылке const.

...