mam następujący prosty kod C++:"nazwiska konstruktora, a nie typu" 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;
}
linii 11, gdzie definicja operator=()
funkcji A
„s jest co jest źle sformułowany. ... lub przynajmniej tak uważam. Zgodnie z oczekiwaniami, G ++ 4.7.4, jak również każda nowa wersja GCC, że próbowałem, rzuca się następujący błąd:
main.cpp:11:1: error: ‘A::A’ names the constructor, not the type
dziwne, chociaż, G ++ 4.4.7 kompiluje program z powodzeniem, bez ostrzeżenia , a nawet drukuje 4 i 5, jak można się było spodziewać, jeśli wiersz 11 został poprawnie napisany (tj. z tylko A&
zamiast A::A&
).
Czy ktoś może mi pomóc rozszyfrować, co dokładnie się tam dzieje z G ++ 4.4.7? Czy jest to po prostu błąd w tym wydaniu (choć bardzo stary i wstyd, że wciąż go używamy)? Myślę, że standard wyraźnie określałby, w jaki sposób należy zadeklarować i zdefiniować funkcję operator=()
.
Nie ma wstydu w użyciu starego kompilator obsługuje codebase starszych. Cholernie trudno zdobyć fundusze na ulepszenie łańcucha narzędzi dla działającego produktu. – user4581301