Mrovqa |
» 2012-09-24 07:52:36 @yoogi pisałeś w SFMLu? Tam masz chociażby przykład referencji, która nie jest argumentem żadnej funkcji. Z resztą podobnie jest przy cout/cin :P |
|
ison |
» 2012-09-24 15:39:38 Wskaźnik to wskaźnik, zawsze ma 4 bajty
|
również nieprawda |
|
Mrovqa |
» 2012-09-25 07:49:17 @up jak coś cytujesz, to cytuj całość... Wskaźnik to wskaźnik, zawsze ma 4 bajty pod systemami 32 bitowymi |
Ja bym powiedział, że wielkość wskaźnika raczej zależy od tego, na jaką platformę została skompilowana aplikacja (x86, x86_64 itp). W językach wysokopoziomowych wielkość wskaźnika jest z góry narzucona. Co masz na myśli, mówiąc, że nie zawsze? Kodzenie w asmie? :P |
|
ison |
» 2012-09-25 15:52:20 @up jak coś cytujesz, to cytuj całość...
|
Ta, cytowany fragment akurat wyrwałem z kontekstu ale odnosiłem się do całej wypowiedzi. Co masz na myśli, mówiąc, że nie zawsze? |
Wskaźniki na metody przechowują więcej informacji ;) |
|
Mrovqa |
» 2012-09-25 19:42:44 Wskaźniki na metody przechowują więcej informacji ;) |
Sprawdzałeś? :P Ja się przyznam, że nie (i tak na razie nie mam zbytnio czasu - szkoła... :/), ale Twoja argumentacja - hmm - tak jak wskaźnik void* zapamiętuje tylko adres, a każdy inny wskaźnik "pamięta jeszcze" typ na jaki wskazuje - więcej info. W rzeczywistości okazuje się, że te "dodatkowe informacje" to trzyma tylko kompilator dla siebie. Później (w binarce) te wskaźniki się niczym nie różnią :). Co do wskaźnika na metodę - pewnie masz rację, póki co pewności nie mam, więc dyskutować nt. nie będę - póki co :) |
|
ison |
» 2012-09-25 19:52:52 jak myślisz? ;) a każdy inny wskaźnik "pamięta jeszcze" typ na jaki wskazuje
|
jak sam napisałeś nie pamięta nic z tego w czasie runtime sprawdź sam #include <cstdio>
class A { public: virtual void foo() { }; };
class B { public: virtual void foo() { }; };
class C : virtual public A , B { public: virtual void foo() { }; };
void foo() { }
int main() { printf( "::foo %d\n",( int ) sizeof( & foo ) ); printf( "A::foo %d\n",( int ) sizeof( & A::foo ) ); printf( "C::foo %d\n",( int ) sizeof( & C::foo ) ); }
na GCC/mingw zapewne dostaniesz 4, 8, 8 pod msvc 4, 4, 12 |
|
Mrovqa |
» 2012-09-25 19:58:22 Yyyy... pomyliłeś sobie adres metody ze wskaźnikiem na metodę... btw przy polimorfii wiem, że klasa ma dodatkowe dane :) |
|
ison |
» 2012-09-25 20:06:00 Yyyy... pomyliłeś sobie adres metody ze wskaźnikiem na metodę
|
powtórz kurs o wskaźnikach ;) int main() { void( C::* ptr )() = & C::foo; printf( "%d\n",( int ) sizeof( ptr ) ); }
pasuje? |
|
1 « 2 » 3 |