Article View: pl.comp.lang.c
Article #267716Re: Ciemna strona C++
From: Sebastian Kaliszewski
Date: Mon, 12 Nov 2007 16:44
Date: Mon, 12 Nov 2007 16:44
57 lines
3346 bytes
3346 bytes
Jedrzej Dudkiewicz wrote:
>> Przykazywany jest wskaźnik na obiekt klasy pochodnej do funkcji
>> oczekującej wskaźnika na obiekt klasy bazowej -- to jest *standardowe*
>> użycie polimorfizmu. To, że funkcja oczekuje przekazania tablicy,
>> tylko przygłupi, kulawy język nie miesza tablice ze wskaźnikami to
>> jest to co jest.
>
> Wydaje mi się, że o ile przykład pokazuje prawdziwy problem, to sam jest
> idiotyczny, tzn. strasznie wydumany. W C++, nawet gdyby tablice były
> obsługiwane prawidłowo, tj. nie byłoby rzutowania (niejawnego) wskaźnika
> na tablicę, to ten przykład chyba byłby ciągle marny:
>
> class A {};
> class B : public A {
> public:
> void do_me() { };
> };
>
> B tablica[3];
>
> void fun(A tablica[])
> {
> tablica[0].do_me(); // <- co z tym?
> }
To się nie skompiluje z dwu powodów:
1. A nie ma metody do_me(), ale to jest, jak rozumiem, przeoczenie
2. Choć A jest nadtypem B, to w poprawionym C++ tablica A nie jest nadtypem
tablicy B. Podobnei jak i dziś A** nie jest żadnym nadtypem **B.
> Znaczy - trzebaby niejawnie jakoś konwertować to na wskaźniki... No nie
> wiem, jakaś porażka. Czyli jeszcze raz - o ile przedstawiony problem
> jest prawdziwy, to przykład jest całkiem z kosmosu - stąd łatwo się go
> czepiać.
W dobrym języku przykłąd byłby nierealizowalny bez reinterpet_cast. Dziś
jest to po prostu dziura w systemie typów.
>> To jest karygodny błąd języka. Tłumaczenie wielbicieli C++, żeby użyć
>> ciężkiego wektora czy niewiele lżejszego, ale w ogóle nie należącego
>> do języka boost::array jest poprostu żałosne.
>
> A co jest ciężkiego w vectorze? To nie zaczepka, tylko ciekawość, żeby
> nie było.
1. Alokacja sterty
2. Powiększanie.
3. Brak kurczenia.
Np. zastąpienie wektora dedykowaną klasą (ciągle z alokacją sterty, ale z
lepszym powiększaniem i kurczeniem, zoptymalizowanej do trzymania typów POD)
dało mi w Śmieciuchu++ zysk rzędu 30%.
pzdr
\SK
Technical Details
Message-ID:
<fh9v10$mss$1@bozon2.softax.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.pl!not-for-mailReferences:
<fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh206f$2d6$1@news.supermedia.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!opal.futuro.pl!news.internetia.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.pl!not-for-mail From: Sebastian Kaliszewski <s@get.it.off.to.reply.informa.pl> Newsgroups: pl.comp.lang.c Subject: Re: Ciemna strona C++ Date: Mon, 12 Nov 2007 17:44:39 +0100 Organization: Softax news server Lines: 57 Message-ID: <fh9v10$mss$1@bozon2.softax.pl> References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh206f$2d6$1@news.supermedia.pl> NNTP-Posting-Host: 83.18.189.42 Mime-Version: 1.0 X-Trace: atlantis.news.tpi.pl 1194885424 1426 83.18.189.42 (12 Nov 2007 16:37:04 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Mon, 12 Nov 2007 16:37:04 +0000 (UTC) User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050322) X-Accept-Language: en-us, en In-Reply-To: <fh206f$2d6$1@news.supermedia.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit