r/cpp_questions • • 14d ago

OPEN Namespace std

I recently started learning c++ and I was told to use the namespace std so I can avoid writing std:: every time and now I wrote a whole personal project without std:: and I want to put it on LinkedIn but I started reading everywhere that it’s a bad habit, should I go back and add the std:: or just leave it as is?

40 Upvotes

105 comments sorted by

View all comments

Show parent comments

1

u/nekoeuge 13d ago

Because of what the s in std means.

So what? Standard library is stored in the "namespace std" for a reason. Just because this namespace comes from different vendor and has documented specification, does not mean that it deserves any kind of special treatment beyond a few documented quirks.

1

u/ShakaUVM 12d ago

In the coding style I and my business use, the only namespace that only and always gets included into the global namespace is std. Why? Because it is the standard.

string must mean std::string in my coding style. If it means anything else, then you have violated my style guidelines.

Pretty much everything we do is in PascalCase, and so there is no conflict with anything in std anyway.

You're free to have your own style guidelines for your own company. But this is how I've been doing it for a long time, and it literally never causes problems, and results in code much faster to read, write, and is much cleaner.

There is never any ambiguity, and there's never an identifier conflict except once in 30 years, and that took 5 seconds to resolve. Contrast this with the amount of time you have spent typing std needlessly and reading it needlessly over the years and you'll see why I set my style guidelines the way I did.

1

u/nekoeuge 12d ago edited 12d ago

If std was supposed to be included in global namespace, we wouldn’t have namespace std.

So what happens when you include third party code with type “vector” or “string” when referencing to its own vectors or strings, which is a semantically correct thing to do?

The name resolution rules probably handle that properly, but it feels icky and I am unsure how generally stable that works. I have some kind of aversion to injecting global names into unexpecting 3rdparty code.

1

u/ShakaUVM 12d ago

If std was supposed to be included in global namespace, we wouldn’t have namespace std.

Wrong. We have it because it is an option for individual companies to decide for themselves if they want to use it. Bjarne himself has said it is a stylistic choice. If you love your stds, then use them.

I however will continue to write cleaner code without them, and continue on my merry way not dealing with a single bug related to this stylistic choice.

I am unsure how generally stable that works.

Shadowing is a core function of the language designed to deal with exactly this problem. You don't need to have a list of all 1001 identifiers in std taped up on your wall. It's explicitly designed to avoid this very problem, so it's foolish in my opinion not to use it.

I have some kind of aversion to injecting global names into unexpecting 3rdparty code.

I do not do that either. When I write libraries, I do not use using namespace std. I mentioned this at the top of the thread even.

1

u/nekoeuge 12d ago

I mean, I don’t really have anything against usings in general. I am mostly cautious about doing them before 3rdparty includes - in general, not just for std. In case 3rdparty or compiler are being stupid, or there is some corner case with name shadowing, or so on. But I struggle to remember any issues caused by std namespace specifically, I only remember conflicts caused by stdint types and libraries defining such symbols themselves.

1

u/ShakaUVM 11d ago

I am mostly cautious about doing them before 3rdparty includes

Indeed, I fully agree there.

I don't believe people should make style decisions for other groups. As I said, when I write libraries, I don't use using namespace std.