Dlaczego nienazwana przestrzeń nazw jest "lepszą" alternatywą dla statycznej? [duplikat]
To pytanie ma już odpowiedź tutaj:
- wyższość nienazwanej przestrzeni nazw nad statyczną? 3 odpowiedzi
Sekcja $7.3.1.1/2 ze standardu C++ brzmi:
Użycie słowa kluczowego static jest przestarzałe przy deklarowaniu obiektów w zakres przestrzeni nazw; nienazwana-przestrzeń nazw zapewnia przełożonego alternatywa.
Nie rozumiem, dlaczego nienazwana przestrzeń nazw jest uważana za lepszą alternatywę? Jakie jest uzasadnienie? Od dawna wiem, co mówi standard, ale nigdy poważnie o tym nie myślałem, nawet gdy odpowiadałem na to pytanie: wyższość nienazwanej przestrzeni nazw nad statyczną?
Czy jest uważany za lepszy, ponieważ może być stosowany również do typów zdefiniowanych przez Użytkownika, jak opisałem w mojej odpowiedź ? A może jest jakiś inny powód, o którym Nie wiem? Pytam o to, szczególnie dlatego, że takie jest moje rozumowanie w mojej odpowiedzi, podczas gdy standard może mieć coś innego na myśli.
4 answers
- Jak już wspomniałeś, przestrzeń nazw działa dla wszystkiego, nie tylko dla funkcji i obiektów.
- Jak zauważył Greg,
static
oznacza już zbyt wiele rzeczy. - Przestrzenie nazw zapewniają jednolity i spójny sposób kontrolowania widoczności w globalnym zasięgu. Nie musisz używać różnych narzędzi do tego samego.
- Podczas korzystania z anonimowej przestrzeni nazw, nazwa funkcji/obiektu zostanie odpowiednio zniekształcona, co pozwala zobaczyć coś w stylu " (anonymous namespace):: xyz "w tabeli symboli po odszyfrowaniu, a nie tylko" xyz " ze statycznym połączeniem.
- Jak wspomniano w komentarzach poniżej, nie wolno używać rzeczy statycznych jako argumentów szablonu, podczas gdy w anonimowych przestrzeniach nazw jest to w porządku. Więcej? Prawdopodobnie, ale nie mogę teraz myśleć o niczym innym.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-12 14:12:03
Jednym z powodów może być to, że static
ma już zbyt wiele znaczeń (mogę policzyć co najmniej trzy). Ponieważ anonimowa przestrzeń nazw może zawierać wszystko, w tym typy, wydaje się lepsza od rozwiązania static
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-12 09:10:18
Są dwa powody, dla których myślę:
-
static
ma dwa różne znaczenia: w class scope oznacza współdzielony przez całą klasę, podczas gdy w file/function scope wpływa na widoczność / przechowywanie... - unnamed namespaces allow to declare new
struct
,class
oraztypedef
Jedna uwaga, Komitet odwołał się do tego: {[0] } nie jest już oznaczony jako przestarzały w n3225
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-12 18:08:06
Bez względu na powody, zmienili zdanie: http://crazycpp.wordpress.com/2011/01/18/static-keyword-is-back/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-12 14:06:21