使用std命名空间,为什么(或者为什么不)我应该在std ::前缀?

时间:2014-12-03 15:12:47

标签: c++ visual-studio-2013

我是 using namespace std;

然后,编码这个有什么问题?

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

据我所知,我应该使用&#34; using namespace&#34;或者每次交替使用std ::前缀,但不能同时使用两者。混合两者有什么缺点?

另外,我如何更换上面的代码?这可以接受吗?

cin.ignore(numeric_limits<streamsize>::max(), '\n');

2 个答案:

答案 0 :(得分:1)

  

我是using namespace std;

这通常是bad idea,除非它在一个狭窄的范围内,以防止污染远离程序的其他部分。

  

然后,对此进行编码有什么问题?

没有;它比它需要的更冗长。该名称既可用作任何范围内的限定std::cin,也可用于cin转储名称的任何范围内的非限定using。但是我建议不要将标准库的内容转储到任何其他范围,以避免库名与我想要使用的名称冲突的危险。

  

将两者混合有什么缺点?

您拥有名称空间有助于避免的名称污染,以及using帮助避免的不太可读的限定名称;两者的缺点和两者的优点。

  

另外,我如何更换上面的代码?

正如您所说,如果cin.ignore(numeric_limits::max(), '\n');的内容已被转储到可访问的范围内,std将起作用。但我仍然建议摆脱using

答案 1 :(得分:0)

如果您已经开始使用std::为函数添加前缀,那么您也可以通过using namespace std;获得任何收益,但是您可以获得从标准库命名空间中提取所有内容的缺点。绝对不要两者都做。也不要将using namespace std放在头文件中,因为代码的用户可能不希望这样。这样做可以假设您的标头的用户没有任何与任何标准库名称冲突的名称,如果不是这样,那么这对您的用户来说是一种痛苦。

一般来说,我通常总是以std::为前缀,以确保没有名称冲突。但是,如果您只是尝试减少输入,那么您可以明确地输入您想要的名称。例如:

 using std::cout;
 cout << "foo";

在这种情况下,您可以通过引入所有内容来减少一些打字而不会污染命名空间。