问题
Some people claim that using namespace std; is bad practice. Others say it's OK in it's place. But everyone agrees that putting it in a header file is verboten.
So dear reader, who can explain this from Bjarne Stroustrup's own web site.
http://www.stroustrup.com/Programming/Graphics/std_lib_facilities.h
He didn't even put it at the top where you might notice it, its about 50 lines down.
What's going on here? Are mischievieous hackers out to discredit BS by putting bad code on his web-site?
回答1:
Seeing as this is a course header, I think students are supposed to include it and then use most of the standard library that way. I am surprised Stroustrup teaches it that way (it is, in my opinion, still bad practice), but it does mean that he has one less bit of syntax to explain to his students. I don't think any non-coursework applications (or, even worse, libraries) are supposed to include it, so it's arguably somewhat acceptable.
I still think it's very poor style, and that saying that standard things have to be prefixed with std:: would have been better.
回答2:
Did you read the comment at the start of the file?
simple "Programming: Principles and Practice using C++" course header to be used for the first few weeks. It provides the most common standard headers (in the global namespace) and minimal exception/error support.
Students: please don't try to understand the details of headers just yet. All will be explained. This header is primarily used so that you don't have to understand every concept all at once. Revised April 25, 2010: simple_error() added
The idea is so you can get started in the language without having to learn about namespaces day 1 nor worry about which standard headers need to be included for what.
回答3:
Firstly, that's teaching material and therefore far from the same. Secondly- so what? Everyone makes mistakes or maintains legacy headers. And thirdly, just because you invented a language doesn't make you the permanent master of everything- especially when there's a Standards committee.
来源:https://stackoverflow.com/questions/7134403/using-namespace-std-in-header-file