我有以下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
即使我在assign
函数中注释掉前2个main
,输出也保持不变。
有人可以向我解释为什么operator+
会返回const
A
吗?
Linux Debian 64位和Windows 7 64位的输出相同。
答案 0 :(得分:8)
它根本不会返回const
A.它返回一个临时A,它只能绑定到const
引用。