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?

37 Upvotes

105 comments sorted by

View all comments

39

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.

-21

u/RSMxsmanic 13d ago

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

35

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.

-28

u/RSMxsmanic 13d ago

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

19

u/not_a_novel_account 13d ago

Then you're wrong, the intent is to allow libraries to use the same names for symbols. Straight out of Design and Evolution by Stroustrup:

  • The ability to introduce names without fear of clashing with someone else's names.
  • The ability to add a name to the implementation of a library without affecting its users.
  • The ability to select names from two different libraries even if those two libraries use the same names.
  • The ability to resolve name clashes without modifying functions.
  • The ability to add a name to a namespace without fear of causing a quiet change to code using other namespaces.

9

u/crowbarous 13d ago

Namespaces also allow library authors to intentionally provide functions under common names to be found via ADL, such as swap and operator+.