mboost-dp1

using namespace std;


Gå til bund
Gravatar #1 - Neo1
17. dec. 2007 18:25
Virker efterhånden somom alle plastrer deres C++ programmer til med ovenstående, bare for at slippe for at skrive "std::" rundt omkring, uden egentlig at tænke over hvad det betyder for programmet?


#include <cstdlib>

using namespace std;

void swap(int& x, int& y);

int main(int argc, char* argv[])
{
int a = 5, b = 17;
swap(a, b);
return 0;
}

swap(int& x, int& y)
{
x = x ^ y;
y = x ^ y;
x = x ^ y;

return;
}



Selvom det egentlig er et funktionelt program, så får man en masse fejl, fordi "swap" funktionen bliver gjort til "std::swap" af using-direktivet, og den funktion findes allerede.

Det er måske et lidt søgt eksempel, og der er mange som mener at man jo så bare kan ændre navnet på sin funktion/variabel, og så længe man kan få det til at compile er det iorden. Hvad siger i Newz-nørder, er jeg den eneste som synes det er at slagte sproget, eller gør i det selv?
Gravatar #2 - arne_v
17. dec. 2007 18:41
Hvilke fejl med hvilken compiler ?

Jeg får ingen fejl hvis jeg sætter det manglende void ind.

Heller ikke ved include af algorithm hvor std swap ligger.
Gravatar #3 - arne_v
17. dec. 2007 18:45
Med hensyn til dit egentlige spørgsmål:
- namespaces er absolut nødvendige
- jeg er selv så doven at jeg using'er hele namespaces
- jeg synes absolut ikke det er kønt med namespace prefixes
over hele koden
- det pæneste er nok at using de enkelte dele man skal bruge

using std::swap;

i dit tilfælde.
Gravatar #4 - Neo1
17. dec. 2007 18:51
#2:

Fangede lige den manglende void for sent ;)

Efter jeg har rettet den får jeg heller ingen fejl, men det ændrer ikke på at det er den forkerte funktion som der bliver brugt.

#3:

Jeg skal da netop ikke bruge using std::swap, så er det at det er funktionen fra std library som bliver brugt, istedet for min egen. Hvad nu hvis den swap funktion lagde to tal sammen istedet for, men compileren brugte std::swap pga. using direktivet i toppen. En svær fejl at finde, det er den slags man ender med at rive hårtotter ud pga :P

"- jeg synes absolut ikke det er kønt med namespace prefixes
over hele koden"

Det er så din mening, synes stadigvæk det er uforsvarligt at hive hele std library i scope fordi man enten ikke gider skrive std:: i sin kode, eller synes det er grimt.
Gravatar #5 - arne_v
17. dec. 2007 18:54
#4

Du dropper:

using namespace std;

og bruger:

using std::xxxx;

for det du skal bruge. Du laver næppe en funktion med samme
navn som noget du skal bruge fra std.
Gravatar #6 - Neo1
17. dec. 2007 19:05
#5:

Ja, det virker som en noget bedre løsning, synes dog stadig at man ligeså godt kan skrive std::

using direktiver virker bare som en unødvendig shortcut. Den eneste grund til at den egentlig kom med var jo så man ikke skulle til at plastre std:: over det hele hvis man skulle recompile noget legacy code med en moderne compiler, og jeg må indrømme at jeg synes at nogle folks brug af using namespace std; grænser til misbrug.
Gravatar #7 - arne_v
17. dec. 2007 19:08
#6

Nu er std:: ikke slemt med hensyn til antal bogstaver, men hvad med com::bigbusiness::middleware::messaging:: ?

Tror du ikke koden vill blive lidt mere læselig med et par using i toppen ?

:-)
Gravatar #8 - Neo1
17. dec. 2007 19:19
#7:

Good point, ville nok blive en del lettere at finde rundt i, i sådan et eksempel er using nok idéel. Men mht. std library og feks. ::boost, der kan jeg sgu ikke finde nogen ordentlig begrundelse for bare at hive alting i scope og så skide på namespaces i det hele taget.
Gravatar #9 - arne_v
17. dec. 2007 19:37
#8

Namespaces er lidt af et stedbarn i C++.

De kom først ret sent ind i sproget.

På et tidspunkt hvor brugen af C++ enten allerede havde toppet eller gjorde det kort tid efter.

"Hvordan får jeg den her gamle C++ kode til at compile efter compiler upgrade" er en ret kendt problem stilling.

Ikke ret mange bruger namespaces til deres egen kode.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login