你更喜欢在C++中使用显式命名空间还是'using'关键字?

23 浏览
0 Comments

你更喜欢在C++中使用显式命名空间还是'using'关键字?

在使用C++命名空间时,你更喜欢显式地命名它们,像这样:\n

std::cout << "Hello, world!\n";

\n还是你更喜欢使用using namespace:\n

using namespace std;
cout << "Hello, world!\n";

\n如果你更喜欢后者,你会在文件范围还是函数范围内声明你的using命令?\n就我个人而言,我更喜欢显式地命名它们——这样虽然要多打几个字,但当使用多个命名空间(例如stdboost)时,我觉得更易读一些。

0
0 Comments

在C++中,有两种方式可以引用命名空间,一种是使用using namespace语句,另一种是使用显式命名空间。然而,关于这两种方式哪种更好的问题一直存在争议。

有人喜欢使用using namespace来引用std和boost命名空间,因为这样可以减少代码的重复性,提高代码的可读性。但是对于其他命名空间,他们更倾向于使用显式命名空间,以避免代码过于冗杂。

另一方面,有人认为显式命名空间更好,因为它可以明确指定代码中使用的命名空间,避免了命名冲突的问题。特别是在头文件中,使用using namespace可能会导致全局命名空间被污染,从而引发一系列的问题。

那么,如何解决这个问题呢?一种解决方法是根据代码的具体情况来选择使用using namespace还是显式命名空间。对于频繁使用的命名空间,可以使用using namespace来简化代码。对于其他命名空间,可以使用显式命名空间来避免命名冲突。

另外,在头文件中,应该避免使用using namespace,以免污染全局命名空间。可以使用命名空间的限定符来引用需要的类或函数,或者在使用时显式指定命名空间。

选择使用using namespace还是显式命名空间取决于代码的具体情况和个人偏好。在使用using namespace时要谨慎,避免全局命名空间的污染,以及可能引发的命名冲突问题。在头文件中尽量避免使用using namespace,使用显式命名空间来避免潜在的问题。

这个问题的出现源于对于命名空间的使用方式的不同看法,解决方法是根据具体情况选择合适的方式,并遵循一些约定和规范以避免潜在问题。

0
0 Comments

C++中使用显式命名空间还是'using'的偏好是一个值得讨论的问题。显式命名空间虽然不会增加额外的输入,但问题在于视觉上的混乱。C++的语法本身就很复杂,没有必要通过使名称更长并且在代码中大量使用::来使情况变得更糟。

我同意Jeff Atwood的观点:最好的代码是没有代码。这一点非常正确。

使用命名空间的导入是一种减少混乱的好方法,并且没有任何缺点:只要打开的命名空间的范围限定在单个编译单元1内,如果出现名称冲突,可以很容易地解决。

为什么显式名称(一般情况下)更易读一直是个谜。读者通常应该对代码足够了解,以能够推断出语义。如果他们不能,那么代码本身需要修复。


1) 推论:头文件中不要使用using!

我认为"视觉上的混乱"是一个奇怪的观点,如果std::这样不好的话,为什么还要使用C++呢?

我完全不理解你的观点。这听起来很轻浮:仅仅因为C++本身就很冗长,并不意味着我们不能改进我们的代码。

0
0 Comments

在C++中,有两种方式可以使用命名空间,一种是显式指定命名空间,另一种是使用using关键字。这引发了一个问题:大家更喜欢哪种方式?

有人表示喜欢显式指定命名空间,因为这样写std不会对他们造成困扰,而且他们清楚地知道它是从哪个命名空间中来的。这在处理包含自己的"字符串"、"向量"等对象的遗留项目时非常有用。代码携带的信息越多,越好。

然而,如果你显式指定了命名空间,就可能会错过一些模板特化。有人承认自己也是出于习惯这样做的,但自从读了Meyer的《Effective C++》之后,他们开始更加有意识地思考这个问题。

对我来说,这只在使用min和max时成为一个实际的问题,而且还被一个微软的头文件进一步破坏,该头文件还定义了一个宏来覆盖min和max。

为了解决这个问题,有几种方法可以尝试。一种方法是在每个需要使用特定命名空间中的对象或函数时都显式地指定命名空间。另一种方法是在文件的开头使用using关键字一次性导入所需的命名空间。这样可以减少代码中的冗余,并使代码更加简洁易读。不过,需要注意的是,使用using关键字导入命名空间时,可能会出现命名冲突的问题。为了避免这种情况,可以使用命名空间别名或限定符来解决冲突。

总之,选择显式命名空间还是使用using关键字是一个关键的编程风格问题。根据个人喜好和实际情况选择合适的方式,并注意避免潜在的问题。

0