Article View: pl.comp.lang.c
Article #268157Re: Ciemna strona C++
From: Sebastian Kaliszewski
Date: Thu, 15 Nov 2007 11:20
Date: Thu, 15 Nov 2007 11:20
29 lines
2471 bytes
2471 bytes
Tomasz bla Fortuna wrote:
>>W przypadku języka C, faktycznie, nie jesteś w stanie ustrzec się
>>takiego błędu.
>
> W C takiego błędu by nie było. W C bym nie upcastował nigdy wskaźnika
> na klasę. Bo.. no nie ma klas. Jeśli funkcja dostaje wskaźnik do
> tablicy elementów A typu T i jej wielkość to A[0] to pierwszy
> element, a A[1] to drugi element, a nie dalszy kawałek A[0], który
> okazał się być jednak innego typu niż T.
>
> A nawet jakbym rzutował w C większe structy na mniejsze to nie jest to
> tak naturalne jak w C++ upcasting. W Idealnych warunkach ten przykład
> nie powinien się skompilować bez zastosowania reinterpret_cast<>.
Tak powinno być, gdyby w C++ nie było tego poważnego błedu projektowego.
Można to było rozwiązać na różne sposoby.
Np, jeśli już koniecznie musimy akurat ten quirk z C przejmować (wywalając
parę innych, takich jak typ funkcja(), konwersje między różnymi wskaźnikami,
itd) to można było choć w wprowadzić jakieś sensowne rozróżnienie na POD i
nie-POD. Naprzykład takie class to jest w zasadzie to samo co
struct { private:. Nic więc nie wnosi. A gdyby struct było zawsze POD, a
class nigdy POD i dla nie-POD odróżnić twardo * od [] (przy okazji w class
wywalić domyślny konstruktor kopiujący i przypisanie) byłoby już lepiej.
pzdr
\SK
Technical Details
Message-ID:
<fhh949$5nq$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> <20071106002442.aebf0037.sulsa@dontmail.me> <fgqpbs$9cu$1@news.vectranet.pl> <20071107012633.3efe623d@Vorago> <fhg43j$b4s$1@kujawiak.man.lodz.pl> <20071115022727.5a697635@Vorago>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: Thu, 15 Nov 2007 12:20:08 +0100 Organization: Softax news server Lines: 29 Message-ID: <fhh949$5nq$1@bozon2.softax.pl> References: <fghgeo$spf$1@nemesis.news.tpi.pl> <20071106002442.aebf0037.sulsa@dontmail.me> <fgqpbs$9cu$1@news.vectranet.pl> <20071107012633.3efe623d@Vorago> <fhg43j$b4s$1@kujawiak.man.lodz.pl> <20071115022727.5a697635@Vorago> NNTP-Posting-Host: 83.18.189.42 Mime-Version: 1.0 X-Trace: nemesis.news.tpi.pl 1195125466 18203 83.18.189.42 (15 Nov 2007 11:17:46 GMT) X-Complaints-To: usenet@tpi.pl NNTP-Posting-Date: Thu, 15 Nov 2007 11:17:46 +0000 (UTC) User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050322) X-Accept-Language: en-us, en In-Reply-To: <20071115022727.5a697635@Vorago> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit