C++ 使用;命名空间foo{";而不是在头文件之外显式限定
如果函数被声明为这样的函数:C++ 使用;命名空间foo{";而不是在头文件之外显式限定,c++,C++,如果函数被声明为这样的函数: namespace foo { void bar(); } 大多数人对函数的定义如下: void foo::bar() { ... } 但是我喜欢这样做: namespace foo { void bar() { ... } } 我更喜欢这种样式,因为它使我不必总是重新键入foo::,这在接受同一名称空间中声明的类型的函数参数中通常非常繁琐。另外,重命名整个名称空间更容易 我想知道为什么我几乎从未在其他人的代码中
namespace foo {
void bar();
}
大多数人对函数的定义如下:
void foo::bar() {
...
}
但是我喜欢这样做:
namespace foo {
void bar() {
...
}
}
我更喜欢这种样式,因为它使我不必总是重新键入foo::,这在接受同一名称空间中声明的类型的函数参数中通常非常繁琐。另外,重命名整个名称空间更容易
我想知道为什么我几乎从未在其他人的代码中看到过我的风格,除了额外的缩进级别(甚至不必缩进名称空间)之外,它还有什么缺点吗
可能导致多个定义错误。此错误在链接时出现
假设您已将此名称空间foo
放在头文件中,并在其中定义了函数bar()
。现在,当您将此头文件包含到多个.cpp
文件中时,将生成foo::bar()
的多个定义。因此,链接器错误
[注意:我假设在第一种情况下,您正在.cpp文件中定义
foo::bar
。在命令行上查找foo::bar
并不容易。让foo::bar
进行grep是非常好的。如果您使用foo::bar
表单,并且意外地使用
如果参数不正确,将出现编译器错误。如果将
定义在源文件的命名空间中,将使用不同的参数
只需定义一个不同的函数,就不会得到
错误,直到您尝试链接使用您的函数的代码(在
对于DLL,可能要到运行时才能使用).
大多数人…
真的吗?我想知道为什么我几乎从来没有在别人的代码中看到过我的风格,真的吗?呃?你看过的代码有多少人?我很少看到前者…我一直使用与你相同的风格,带有缩进…这对我来说似乎是一个相当主观的问题。你没有看到过我写的所有好代码。:-)嗯,真的吗?还有另一个选项“can”not?@Tomalak,我不明白。namespace foo{void bar();}
不会导致任何链接器错误。因为我假设foo::bar()
将在.cpp
文件中定义。为什么2次否决。答案中有什么错误。您可以假设命名空间foo{void bar{..}}
也是如此。“问题”你所说的与这两种语法之间的任何差异毫无关系。@Tomalak,OP曾问过我几乎从未在其他人的代码中看到过我的风格,它有什么缺点吗。算了吧。foo::bar
表单只能是一个定义,而不是声明。我想。@Tomalak是的。语法不是对于非定义的声明是合法的。“不能是非定义声明”*然后:)
namespace foo {
void bar {
...
}
}