mboost-dp1
using namespace std;
- Forside
- ⟨
- Forum
- ⟨
- Programmering
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?
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?
#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?
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.
- 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.
#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.
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.
#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.
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.
#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.
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.
#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.
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.