2011-09-26 62 views
0

我有下面的C++代碼:朋友操作人員的行爲(常量VS非const)

#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 

輸出保持不變,即使我註釋掉的在main函數中的前2個assign

有人可以向我解釋爲什麼operator+返回constA

輸出在Linux Debian 64bit和Windows 7 64位都是一樣的。

+0

爲什麼狡猾的縮進? –

回答

8

根本沒有返回const A.它返回一個臨時的A,它只能綁定到const引用。

+0

在C++ 11中,臨時對象也可以綁定到右值引用。 –