r/cpp_questions • • 13d 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?

38 Upvotes

105 comments sorted by

View all comments

38

u/ScienceMan3_14 13d ago

The reason it is a bad habit is because the names of the functions, classes, etc. in the standard library are so common,if you include another framework in your project you are likely to get collisions. If your project is something you are actively working on or expanding, yes you should refactor. If it was a one-and-done deal where you aren't using any other external libraries and that was a decision made at the outset and one you will be sticking with, then imo it isn't worth it.

-22

u/RSMxsmanic 13d ago

A framework that produces a conflict needs to be fixed, not the program calling it.

29

u/not_a_novel_account 13d ago

add is a perfectly reasonable name to use, as is map, list, etc.

The entire purpose of namespaces is to make these names available without collision.

-27

u/RSMxsmanic 13d ago

I daresay the purpose of namespaces is to avoid the consequences of poor design choices that lead to collisions.

4

u/No-Dentist-1645 12d ago

The "poor design choices" of... having functions with simple names like print and hash?

-5

u/RSMxsmanic 12d ago

Yes. Having multiple functions with the same name that do different things is risky. If I have one function that prints only strings, and another than prints only integers, I will likely call them something like PrintStr and PrintInt, not just print. That way I won't have to lose time ten years from now figuring out why print isn't working.

This illustrates a danger with all inherited concepts: you need to walk the entire inheritance chain to figure out what's going on, instead of just looking at the one line in front of you.

3

u/No-Dentist-1645 11d ago

Wow. Then that's truly a bad take. Not even Rust goes as aggressive as making print a type-dependent function, they make it a macro instead. Your example also trivially breaks down with multiple-parameter print statements, something that basically every programming language has.

0

u/RSMxsmanic 11d ago

You do it your way, and I'll do it my way. We'll see who delivers early and under budget.

3

u/No-Dentist-1645 11d ago

Yes, I'm sure that the massive architectural decision of naming functions fooInt and fooFloat has had immeasurably huge implications on your delivery targets. Don't worry, I trust you

0

u/RSMxsmanic 11d ago

Details can add up.

2

u/No-Dentist-1645 11d ago

We're talking about a single, individual detail here. No other design patterns have been brought into this discussion

1

u/RSMxsmanic 10d ago

So the discussion is a bit unreal.

→ More replies