From: Milan B. <mi...@km...> - 2005-08-25 14:40:51
|
Nando Dessena wrote: > M> It is considered bad practice. If you put "using" in header file, it > M> spreads in *all* .cpp and .h files that include it, which can have > M> unexpected side-effects. > > OK, I see the problem WRT general use of "using namespace" in header > files. Thanks. > Yet, regarding *just* std, I think that's exactly the effect I'd > desire. I mean, if "using namespace std" was implicit, it would be an > advantage *for FlameRobin*. Well, consider the following example: #include "table.h" #include <ibpp.h> Suppose you have "using namespace std" in table.h. It would also pollute ibpp.h with that declaration, and whoever built ibpp.h probably doesn't expect that. It's just an example (perhaps a mix with wx.h would even have some side-effects), but you get the point. Also, namespaces can be nested. So, if one .h includes the other, and you don't put "using namespace" everywhere, then some compilers might start looking for std::std::string when they encounter std::string. There are some other examples why it is Bad(tm), I just can't remember of the top of my head. > std is (logically) really more an addition to the > language than a library, AFAIU. I'm sure that none of the people in C++ committee (or at various C++ groups, like comp.lang.c++.moderated which I follow occasionally) would agree with you. Let's just say that std is as much the part of the language, as is VCL library in Delphi. > M> "int" is datatype. > > So are string, vector and list Ok. "int" is a built-in datatype, defined by C++ standard. Better? >. This is the nice thing about OOP: > classes are user defined datatypes. Let's move to Objectville, weather > is good there, and houses are cheap. :-) I'm not saying that we shouldn't use std::string. > A class or otherwise a typedef, or even (shudder) a #define. Yes, and > that's because of convention, not hard language rules. The same > convention I feel should stand for std. If anyone creates a string > class OK, string is probably not the best thing to compare with. But, you have stringstream, list, vector, stack, etc. We might want to introduce some library which might define some of those at some point. Ok, it probably won't happen for FlameRobin, but I write C++ code for other stuff too, so it's hard for me to stop typing std::string, std::vector, etc. You would probably have to "correct" all the code I'm going write in future too, as I'll probably forget myself and write std:: all over. > M> If you really can't find anything better to do <g> > > I have. Acting, hiking, biking, speleology... Pick one. I think I'll > add namespace-pollution to the list after all. :-) Well, ok, go ahead. Just don't say I didn't warn you. :) > P.S. Just to make it clear, I wouldn't be proposing any indiscriminate > use of "using namespace" for namespaces other than std, ever. Ok. -- Milan Babuskov http://abrick.sourceforge.net |