🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #268129

Re: Ciemna strona C++

#268129
From: Seweryn Habdank-Wojewódzki
Date: Wed, 07 Nov 2007 22:25
63 lines
2645 bytes
Witam

Maciej Sobczak wrote:

> Nie jest to takie oczywiste, bo using namespace może być zupełnie
> sensownie użyte np. w ciele funkcji, która jest zdefiniowana w
> nagłowku. Np:
> 
> template <typename T>
> void print(const T & t)
> {
>     using namespace std;
>     cout << t;
> }

Jaki jest poziom zagnieżdżenia tego using? Tak na prawdę szkodliwe jest
tylko globalne using, jak sobie ktoś w swojej przestrzeni nazw tak zrobi to
sam sobie powróz ukręcił na karku. 

Można ewentualnie patrzeć czy nie dajemy tak:

namespace foo
{
        using namespace ::std;

}

Potrzebne są dwa liczniki, jeden kontrolujący poziom zagnieżdzenia, drugi
wskazujący, czy dane zagnieżdżenie dotyczy namespace, czy nie.
 
> Nie ma powodu, żeby tego zabraniać

Też tak uważam. W zasadzie to wystarczy sprawdzić co jest przed "{"
poprzedzającym wyrażenie using i wiadomo czy to jest groźne czy nie.

Praktycznie należy zapamiętać dwa wyrażenia poprzedzające "{" i
jeżeli "using namespace" (UN) występuję na poziomie 0 to zawsze alarm.
Jeżeli UN występuje na poziomie > 0 to odpamiętuje się dwa wyrazy przed "{"
jeśli one są cokolwiek inne niż {bleble, namespace} albo {namespace, xxx} to
jest raczej dobrze.

Przykład paskudny:

#define NASTY_DEFINE
#define NASTY_DEFINE1
#define NASTY_DEFINE2
#define NASTY_DEFINE3

namespace foo NASTY_DEFINE NASTY_DEFINE1 NASTY_DEFINE2 NASTY_DEFINE3 
{

}

> a odróżnienie tego od tych 
> "brzydkich" przypadków nie jest proste.

Proszę, czy możesz podać coś konkretnego?

Pozdrawiam.

-- 
|\/\/|   Seweryn Habdank-Wojewódzki
 \/\/
Technical Details
Message-ID: <fgtd7m$pp0$1@news.vectranet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.vectranet.pl!not-for-mail
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <geauv4-p5c.ln1@router.piechotka.com.pl> <fgi02b$mv5$1@news.dialog.net.pl> <fgt8fm$72r$4@inews.gazeta.pl> <fgt8h5$72r$5@inews.gazeta.pl> <1194472555.796343.35790@z9g2000hsf.googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.vectranet.pl!not-for-mail
From: Seweryn Habdank-Wojewódzki <shw_mail@wp.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Ciemna strona C++
Date: Wed, 07 Nov 2007 23:25:31 +0100
Organization: VectraNET - http://www.vectranet.pl
Lines: 64
Message-ID: <fgtd7m$pp0$1@news.vectranet.pl>
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <geauv4-p5c.ln1@router.piechotka.com.pl> <fgi02b$mv5$1@news.dialog.net.pl> <fgt8fm$72r$4@inews.gazeta.pl> <fgt8h5$72r$5@inews.gazeta.pl> <1194472555.796343.35790@z9g2000hsf.googlegroups.com>
Reply-To: shw_mail@wp.pl
NNTP-Posting-Host: 078088193244.osw.vectranet.pl
Mime-Version: 1.0
X-Trace: news.vectranet.pl 1194473526 26400 78.88.193.244 (7 Nov 2007 22:12:06 GMT)
X-Complaints-To: usenet@news.vectranet.pl
NNTP-Posting-Date: Wed, 7 Nov 2007 22:12:06 +0000 (UTC)
User-Agent: KNode/0.10.5
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit