1

If a function is declared as such:

namespace foo {
    void bar();
}

Most people define the function like this:

void foo::bar() {
    ...
}

However I like to do it this way:

namespace foo {
    void bar() {
        ...
    }
}

I prefer this style because its saves me from always retyping foo::, which is often tedious in function parameters that accept types declared in that same namespace. Plus its easier to rename the whole namespace.

I'm wondering why I almost never see my style in other peoples code, are there any disadvantages too it, besides the additional indentation level (and you don't even have to indent namespaces)?

Praetorian
  • 106,671
  • 19
  • 240
  • 328
Lukas Schmelzeisen
  • 2,934
  • 4
  • 24
  • 30

3 Answers3

4

If you use the foo::bar form, and accidentally define the function with incorrect arguments, you will get a compiler error. If you put the definition in a namespace in the source file, different arguments will simply result in a different function being defined. You won't get an error until you try to link with code which uses your function (which in the case of a DLL, may not be until runtime).

James Kanze
  • 150,581
  • 18
  • 184
  • 329
0

Finding foo::bar on the command-line is not easy. Having foo::bar to grep for is quite nice.

murrekatt
  • 5,961
  • 5
  • 39
  • 63
-2
namespace foo {
    void bar {
        ...
     }
 }

Can cause multiple definition error. This error comes at link time.

Say that you have put this namespace foo in a header file and defined the function bar() inside it. Now, when you include this header file to multiple .cpp file, multiple definitions of foo::bar() will be generated. Thus, linker error.

[Note: I assume that in the 1st case, you are defining foo::bar in a .cpp file.]

iammilind
  • 68,093
  • 33
  • 169
  • 336