我有以下簡單的C++代碼:11「的名稱的構造,而不是類型」在G ++ 4.4.7
#include <cstdio>
class A
{
public:
A(int y) : x(y) {}
A& operator=(const A& rhs);
int x;
};
A::A& A::operator=(const A& rhs) { this->x = rhs.x; return *this; }
int main(int, char**)
{
A a1(5);
A a2(4);
printf("a2.x == %d\n", a2.x);
a2 = a1;
printf("a2.x == %d\n", a2.x);
return 0;
}
線,其中A
的operator=()
函數的定義是在,格式錯誤。至少,我相信是的。正如預期的那樣,G ++ 4.7.4,以及海灣合作委員會的每一個新版本,我已經試過了,引發以下錯誤:
main.cpp:11:1: error: ‘A::A’ names the constructor, not the type
奇怪的是,雖然,G ++ 4.4.7編譯成功此方案,沒有警告,甚至打印4和5,如果第11行被正確寫入(即僅用A&
而不是A::A&
),就會如預期的那樣。
有人可以幫助我解釋G ++ 4.4.7究竟發生了什麼嗎?這只是該版本中的一個錯誤(雖然是一個非常古老的版本,並且仍然在使用它)我們感到羞愧。我認爲標準將明確說明如何聲明和定義operator=()
函數。
有一個在使用舊的編譯器支持傳統的代碼庫沒有羞恥。很難獲得資金來升級工作產品的工具鏈。 – user4581301