Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wywołanie funkcji + poboczna dyskusja o referencji

Ostatnio zmodyfikowano 2012-09-25 21:24
Autor Wiadomość
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
C/C++
int obj;
int & ref = obj; // ta sama zmienna "ma już teraz dwie nazwy" - obj oraz ref
P-65465
ison
» 2012-09-24 15:39:38
Wskaźnik to wskaźnik, zawsze ma 4 bajty
również nieprawda
P-65470
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
P-65500
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 ;)
P-65512
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 :)
P-65530
ison
» 2012-09-25 19:52:52
Sprawdzałeś? :P
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
C/C++
#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
P-65532
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 :)
P-65535
ison
» 2012-09-25 20:06:00
Yyyy... pomyliłeś sobie adres metody ze wskaźnikiem na metodę
powtórz kurs o wskaźnikach ;)

C/C++
int main()
{
    void( C::* ptr )() = & C::foo;
    printf( "%d\n",( int ) sizeof( ptr ) );
}
pasuje?
P-65537
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona