朋友操作员行为(const与非const)

ami*_*zle 0 c++ friend

我有以下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);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

First method
Second method
Second method
Run Code Online (Sandbox Code Playgroud)

即使我注释掉函数中的前2 assign秒,输出也保持不变main.

有人可以向我解释为什么operator+返回一个const A

Linux Debian 64位和Windows 7 64位的输出相同.

Pup*_*ppy 8

它根本不会返回constA. 它返回一个临时A,它只能绑定到const引用.