Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: Rynek IT z C C++

Piotr Likus:

Wskaźniki są patogenne. Dlatego wymyślono referencje.

Nieprawda. Referencje wymyślono po to by utrzymać zapis operatorów.
Dostałem wskaźnik i co dalej? Hmm, zwolnić czy nie...
Przy referencji nie ma tego wyboru.

Za przeproszeniem : to nie ma nic do rzeczy. Dostajesz referencję na obiekt i co, wołać .Destroy() czy nie wołać?

To o czym tu piszesz to kwestia konwencji i umowy z resztą twórców danego projektu a nie zapisu kropka czy strzałka.Szymon Kubisiak edytował(a) ten post dnia 02.10.08 o godzinie 15:27
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: Rynek IT z C C++

Piotr P.:
Szymon Kubisiak:
Na marginesie dobra rada: z własnego doświadczenia wiem że nie należy myśleć o pointerach jako o "wskaźniku na typ":
int *piCostam;// źle

Co tu jest źle?

Spacja : )
int *piCostam;
int* piCostam;

To tylko moja rada dla ludzi którym trudno jest pojąć ideę pointerów.
Piotr P.

Piotr P. Software Developer

Temat: Rynek IT z C C++

Szymon Kubisiak:
int *piCostam;// źle

Co tu jest źle?

Spacja : )
int *piCostam;

Qrcze... to jest źle? Nie jestem fanem i znawcą C++ ale to jest masakra jeśli ten zapis jest poprawny w C a w C++ już nie...
Mateusz Berezecki

Mateusz Berezecki no fluff, just stuff

Temat: Rynek IT z C C++

Po krotkiej lekturze standardu C++ z 2005 dodaje kolejna ciekawa informacje, ktora mam nadzieje polozy kres bezsensownej dyskusji ;)

Ponizej owy wycinek z Working Draft, Standard for Programming
Language C++

A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to zero. A null
pointer constant can be converted to a pointer type; the result is the null pointer value of that type and is distinguishable
from every other value of pointer to object or pointer to function type.


Tak wiec kwestie typu mamy rozwiazana, jest to "integer type", a sam NULL jest wyrazeniem ktorego wartosc po ewaluacji wynosi tyle co int(0). Ponadto mamy napisane, ze jest to "constant expression" , a wiec kazdy kompilator optymalizujacy w procesie constant folding, zamieni to na "0" . Hura! Problem rozwiazany.

Pozdrawiam i zachecam do powrotu do dyskusji na temat IT i C++ :)
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: Rynek IT z C C++

Piotr P.:
Szymon Kubisiak:
int *piCostam;// źle

Co tu jest źle?

Spacja : )
int *piCostam;

Qrcze... to jest źle? Nie jestem fanem i znawcą C++ ale to jest masakra jeśli ten zapis jest poprawny w C a w C++ już nie...

Nie jest źle względem języka. Oba działają.
To tylko ja radzę nie rozumiejącym pointerów używać LPINT a nie int *pi;

konto usunięte

Temat: Rynek IT z C C++

Szymon Kubisiak:
Nie. Przekazuję dokładnie 0. *((int*)NULL jest wartością pod adresem zero, a referencja bierze adres na to wszystko - czyli zero. Adres-zawartość-(niejawny)adres.
Nigdzie nie odwołuję się do zawartości komórki zero, to dopiero zrobi ten kto dostanie ode mnie tak spreparowaną referencję (i się wywali)

Byc moze jednak masz racje. Bede musial w wolnej chwili na spokojnie to przeanalizowac.
Nie wiedzieć czy jest poprawna czy nie? Jak dla mnie minus.

Dobrze, ale potrafisz podac sensowny przyklad, w ktorym wskaznik jest bezpieczniejszy od referencji? Nie twierdze, ze takiego przykladu nie ma bo byc moze na tym etapie dyskusji czegos nie zauwazam. Chcialbym jednak zerknac na kod, w ktorym referencja jest gorsza od wskaznika.

konto usunięte

Temat: Rynek IT z C C++

Tomasz Krzos:
Szymon Kubisiak:
Nie. Przekazuję dokładnie 0. *((int*)NULL jest wartością pod adresem zero, a referencja bierze adres na to wszystko - czyli zero. Adres-zawartość-(niejawny)adres.
Nigdzie nie odwołuję się do zawartości komórki zero, to dopiero zrobi ten kto dostanie ode mnie tak spreparowaną referencję (i się wywali)

Byc moze jednak masz racje. Bede musial w wolnej chwili na spokojnie to przeanalizowac.

Rozbilem sobie to wyrazenie na kilka innych, bardziej przejrzystych wyrazen. Musze przyznac Ci racje - nie ukrywam, ze z bolem :D Pokrecilo mi sie: &(*wskaznik) = wskaznik, wiec jezeli wskaznik = 0 to &(*wskaznik) tez jest rowne 0. Podczas analizy wyrazenia zapomnialem o znaku '&'. Zwracam honor :)Tomasz Krzos edytował(a) ten post dnia 02.10.08 o godzinie 17:56

konto usunięte

Temat: Rynek IT z C C++

Ale tak z drugiej strony, to dziala rowniez takie cos:


using namespace std;

void f(int &i)
{
if (&i == NULL)
{
cout << "NULL" << endl;
}
}

int main()
{
f( *((int*)NULL) );
system("PAUSE");
return 0;
}


Wyglada wiec na to, ze jednak sie da sprawdzic czy adres jest rozny od NULLa :)Tomasz Krzos edytował(a) ten post dnia 02.10.08 o godzinie 18:21
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: Rynek IT z C C++

Adres od referencji, nieźle - o tym nie pomyślałem!

konto usunięte

Temat: Rynek IT z C C++

Szymon Kubisiak:
Adres od referencji, nieźle - o tym nie pomyślałem!

A widzisz :) Milo, ze jednak z dyskusji cos wyniklo :)
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: Rynek IT z C C++

Człowiek się uczy całe życie - to jest w tej pracy najlepsze.

konto usunięte

Temat: Rynek IT z C C++

Szymon Kubisiak:
Adres od referencji, nieźle - o tym nie pomyślałem!

:) Jak bys pisal operatory to bys to znal :)

Zwyczajowo operator przypisania wyglada nastepujaco:

Klasa& Klasa::operator= ( const Klasa& rhs )
{
if( this != &rhs ) {
// do wykonania.
}

return *this;
}
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: Rynek IT z C C++

Nie piszę operatorów, piszę CopyFrom(T* pPattern)
: )

Ale dzięki za dobry trik.Szymon Kubisiak edytował(a) ten post dnia 02.10.08 o godzinie 18:31

konto usunięte

Temat: Rynek IT z C C++

Szymon Kubisiak:
Nie piszę operatorów, piszę CopyFrom(T* pPattern)

Nie znam CopyFrom.
Ale pytanie, jesli kopiujesz obiekt potomny, to obiekt bazowy (i ew. kolejni przodkowie) tez sa kopiowani?

Mysle. ze jednak nie. CopyFrom to chyba windowsowa wersja memcpy.Piotr Pszczolkowski edytował(a) ten post dnia 02.10.08 o godzinie 18:41
Szymon Kubisiak

Szymon Kubisiak Developer aplikacji
mobilnych Android

Temat: Rynek IT z C C++

Chodziło mi o definiowanie mojej metody kopiowania (w tych rzadkich przypadkach gdzie jest potrzebna)
Tomasz Kaczanowski

Tomasz Kaczanowski Ot, programista

Temat: Rynek IT z C C++

Szymon Kubisiak:
Piotr Likus:

Wskaźniki są patogenne. Dlatego wymyślono referencje.

Nieprawda. Referencje wymyślono po to by utrzymać zapis operatorów.
Dostałem wskaźnik i co dalej? Hmm, zwolnić czy nie...
Przy referencji nie ma tego wyboru.

Za przeproszeniem : to nie ma nic do rzeczy. Dostajesz referencję na obiekt i co, wołać .Destroy() czy nie wołać?

Podstawowa zasada - jeśli nie ty powołujesz obiekt do życia, nie ty powinienes go zwalniać. Czyli jeśli jest jakaś funkcja UtwórzObiekt, powinna byc też funkcja w tej samej bibliotece funkcja ZwolnijObiekt. Inaczej tylko czekać jak pojawią sie problemy.

konto usunięte

Temat: Rynek IT z C C++

Szymon Kubisiak:
Piotr P.:
Szymon Kubisiak:
int *piCostam;// źle

Co tu jest źle?

Spacja : )
int *piCostam;

Qrcze... to jest źle? Nie jestem fanem i znawcą C++ ale to jest masakra jeśli ten zapis jest poprawny w C a w C++ już nie...

Nie jest źle względem języka. Oba działają.
To tylko ja radzę nie rozumiejącym pointerów używać LPINT a nie int *pi;

Pointery są po to żeby ich używać. Każda redefinicja składni (jak np. LPINT) wg mnie tylko zaciemnia kod. Chociaż jak ktoś ma dysonans poznawczy i nie lubi C, to rzeczywiście, LPINT może pomóc.

Co do spacji przed czy po gwiazdce to chyba bardziej trywialnego tematu nie było w historii programowania. A dyskutuje nad tym masa ludzi...
Michał Cichoń

Michał Cichoń Student,
Politechnika Śląska
w Gliwicach

Temat: Rynek IT z C C++

Piotr Likus:

Co do spacji przed czy po gwiazdce to chyba bardziej trywialnego tematu nie było w historii programowania. A dyskutuje nad tym masa ludzi...

// 1
int* ptr1;
int *ptr2;

// 2
int* ptr3, *ptr4;
int *ptr5, *ptr6;


Każdy widzi różnice? Nie ma innej niż stylistyczna, to której używamy zależy od tego, czy chcemy mieć dobrze wyglądający kod. To z kolei zależy od ogólnej konwencji formatowania. W tym miejscu nie ma powinności. :)
Piotr P.

Piotr P. Software Developer

Temat: Rynek IT z C C++

Mateusz Berezecki:
Dolacze swoje 5 groszy :)

1) Do wskaznika mozna przypisac _dowolna_ liczbe

Z czy bez rzutowania?
W pierwszym przypadku jest to po prostu obciecie liczby, w drugmi procesory udostepniaja dwa rodzaje instrukcji, sa to instrukcje tzw. "sign extend" lub "zero extend".

Wszystkie procesory?
Mateusz Berezecki

Mateusz Berezecki no fluff, just stuff

Temat: Rynek IT z C C++

Piotr P.:
Mateusz Berezecki:
Dolacze swoje 5 groszy :)

1) Do wskaznika mozna przypisac _dowolna_ liczbe

Z czy bez rzutowania?

Zalezy jak bardzo pozadasz tego efektu.
Znam conajmniej 3 sposoby na przypisanie i z rzutowaniem, oraz bez rzutowania. Tylko po co?

Tak sie zastanawiam, po co robic takie rzeczy. Mozna zrobic naprawde duzo, ale czy to ma sens?
W pierwszym przypadku jest to po prostu obciecie liczby, w drugmi procesory udostepniaja dwa rodzaje instrukcji, sa to instrukcje tzw. "sign extend" lub "zero extend".

Wszystkie procesory?

Na pewno prawie wszystko (nie spotkalem sie z czyms co takiej instrukcji nie posiada) z firmy Intel, wiekszosc procesorow ARM, procesory firmy Transmeta, PowerPC. No nie wiem... nawet stare Atmele mialy taka instrukcje lub jej ekwiwalent.

Następna dyskusja:

Co sie dzieje w Polsce (ryn...




Wyślij zaproszenie do