Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 全局命名空间前缀的规则和实践?_C++_Namespaces_Std - Fatal编程技术网

C++ 全局命名空间前缀的规则和实践?

C++ 全局命名空间前缀的规则和实践?,c++,namespaces,std,C++,Namespaces,Std,我见过很多库引用全局名称空间(前面加了:)以防止混淆。在某些代码库中,它似乎作为一种编码规则得到了很好的实施,尽管这种混淆很少发生: 名称空间库\u代码{ 名称空间win32_后端{ 无效某些\u后端\u内部\u函数(){ ::SomeWin32GlobalFunction(…);//几乎没有问题,命名规则不同 } } } 有时甚至非库代码也是这样编写的: intmain(){ 使用namespace::boost::math::constants; std::cout好吧,这个问题可能不止一

我见过很多库引用全局名称空间(前面加了
)以防止混淆。在某些代码库中,它似乎作为一种编码规则得到了很好的实施,尽管这种混淆很少发生:

名称空间库\u代码{
名称空间win32_后端{
无效某些\u后端\u内部\u函数(){
::SomeWin32GlobalFunction(…);//几乎没有问题,命名规则不同
}
}
}
有时甚至非库代码也是这样编写的:

intmain(){
使用namespace::boost::math::constants;

std::cout好吧,这个问题可能不止一个答案,很多人可能不同意我的答案

我见过很多库引用全局名称空间(前缀::),以防止混淆

命名空间的设计是为了在很多地方都有相同的标识符来消除混淆。使用C++编写任何C++代码是标准的。在使用正确的命名空间时,你可以看到Boost库的实现。它会告诉你如何在代码中实现。 然而,我几乎从未见过std名称空间像::std::max(a,b)那样被预先加上前缀,即使对于这样有严格规则的项目也是如此

我从不在我的代码中使用
使用名称空间std
,我强烈建议其他人也不要使用它。我见过许多专业人士在他们的代码中使用
使用名称空间std
。这是非常不受欢迎的。这就像他们使用它的习惯。是的,这只是在std的情况下,因为在代码中,如果你不使用
使用命名空间标准
,您必须一次又一次地使用
std::
,这对许多程序员来说是不可取的

如果您使用max(),您将不知道它属于哪个名称空间,但当您使用std::max()时,现在您知道它是标准库的一部分

如果对
std
以外的内容使用
使用名称空间
,则之后可能会遇到一些问题,维护代码将花费更多的精力,这是不可取的

例如: 您已经包含了许多文件,并且在两个名称空间
std
myNamespace
中定义了max(),现在您已经使用了

using namespace std;
using namespace myNamespace;

现在,当您使用
max()
时,会出现混淆,因为max属于哪个名称空间。

好吧,这个问题可能不只一个特定的答案,许多人可能不同意我的答案

我见过很多库引用全局名称空间(前缀::),以防止混淆

命名空间的设计是为了在很多地方都有相同的标识符来消除混淆。使用C++编写任何C++代码是标准的。在使用正确的命名空间时,你可以看到Boost库的实现。它会告诉你如何在代码中实现。 然而,我几乎从未见过std名称空间像::std::max(a,b)那样被预先加上前缀,即使对于这样有严格规则的项目也是如此

我从不在我的代码中使用
使用名称空间std
,我强烈建议其他人也不要使用它。我见过许多专业人士在他们的代码中使用
使用名称空间std
。这是非常不受欢迎的。这就像他们使用它的习惯。是的,这只是在std的情况下,因为在代码中,如果你不使用
使用命名空间标准
,您必须一次又一次地使用
std::
,这对许多程序员来说是不可取的

如果您使用max(),您将不知道它属于哪个名称空间,但当您使用std::max()时,现在您知道它是标准库的一部分

如果对
std
以外的内容使用
使用名称空间
,则之后可能会遇到一些问题,维护代码将花费更多的精力,这是不可取的

例如: 您已经包含了许多文件,并且在两个名称空间
std
myNamespace
中定义了max(),现在您已经使用了

using namespace std;
using namespace myNamespace;

现在当您使用
max()
时,会出现混淆,因为max属于哪个名称空间。

好吧,对不起,我应该更加小心措辞。我要问的不是
std
名称空间为什么是显式的;而是全局名称空间前缀(
)在几乎所有项目中都省略了
std
之前。就我个人而言,我从未使用过全局名称空间前缀(:),但这些答案并不能解释不一致性。所有这些原因(例如,难以阅读、不必要的混乱、仅用于消除歧义)也可以很容易地应用于非
std
代码。这样做只是为了消除歧义。我有一段代码,这是必要的,因为我在一个名称空间
X
,它有一个标准偏差函数–
std
。每当我想访问
std
名称空间时,我需要使用
::std
be否则编译器会认为我引用的是上述函数。具体示例:名称空间X{double std(::std::vector const&values){…}void foo(::std::vector const&values){::std::我应该在措辞上更加小心,对不起。我问的不是为什么
std
名称空间是显式的;而是在
std
几乎在所有项目中被省略之前的全局名称空间前缀(
::
)但这些答案并不能解释矛盾。所有这些原因(例如,难以阅读,不必要的混乱,仅用于消除歧义)也可以很容易地应用于非
std
代码。这样做只是为了消除歧义。我有一段代码,这是必要的,因为我在命名空间
X
中,它有一个标准偏差函数–
std
。每当我想访问