Spectro
Mistrz grilla
Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów
Skąd: Kurdwanów
|
Wysłany: Pią 22:52, 19 Sty 2007 Temat postu: [C++] Tajemnicza zmiana typów |
|
|
Kod: | #include <iostream>
#include <typeinfo>
#include <set>
using namespace std;
struct srt;
class klasa {
public:
klasa(int n = 0): k(n) {}
friend struct srt;
private:
int k;
};
struct srt {
bool operator()(const klasa &a, const klasa &b) {
return a.k<b.k;
}
};
set<klasa, srt> S;
void funk() {
set<klasa, srt>::iterator tmp = S.find(klasa(6));
cout << typeid(*tmp).name() << endl;
cout << typeid(klasa()).name() << endl;
cout << typeid(klasa(3)).name() << endl;
}
int main() {
S.insert(klasa(5));
S.insert(klasa(9));
S.insert(klasa(6));
S.insert(klasa(2));
funk();
return 0;
} |
Po skompilowaniu na virgo kompilatorem GCC i wykonaniu:
Kod: | 5klasa
F5klasavE
5klasa |
O_o
Jeśli ktoś by mi wyjaśnił, dlaczego ten program nie wypisał mi 3 takich samych nazw klas, to byłbym bardzo wdzięczny. Czy to jest błąd kompilatora?
edit: Ten set jest w sumie dla zmyły, ale chciałem sprawdzić czemu nie mogę do danego obiektu, na który wskazuje iterator, odwołać się po prostu poprzez operator * , a po sztucznym naprawieniu sytuacji program rzuca segfaultami... (wiem, że zdanie skonstruowane po polskiemu :P )
|
|