Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

[C++] Tajemnicza zmiana typów

 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Spectro
Mistrz grilla



Dołączył: 09 Mar 2006
Posty: 2306
Przeczytał: 0 tematów

Skąd: Kurdwanów

PostWysł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 )
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Yoter
zielony żul



Dołączył: 19 Lis 2005
Posty: 1033
Przeczytał: 0 tematów

Skąd: Gościeradów

PostWysłany: Pią 23:42, 19 Sty 2007    Temat postu:

WBI mówić, że
Kod:
       typeid(klasa()).name(); 

bierze nie obiekt typu klasa ale jej konstruktor :D F5klasavE to tak jakby typ konstruktora a nie obeiktu klasa(0)... np. to v które się tam pojawia oznacza że konstruktor bierze argument typu void... jak wstawisz
Kod:
       typeid(klasa(int)).name(); 

to powinno wypisać F5klasaiE .... co oznaczaja F i E WBI jeszcze nie wiedzieć... :P
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin