C++ 在提及某一特定项目时,使用“是否”是一种良好的做法;使用“?”;?

C++ 在提及某一特定项目时,使用“是否”是一种良好的做法;使用“?”;?,c++,c++11,namespaces,C++,C++11,Namespaces,例如,我知道我的代码中只需要std名称空间中的“cout”,因此我将其称为: using std::cout; 因此,我可以自由地将其用作: cout << "Using namespaces like a boss!" << std::endl; cout使用名称空间:标识符是语言的一部分,因为在某些程序中它很有用。您正在平衡简洁性和灵活性与脆弱性,但最糟糕的情况是您必须通过消除您所指的cout对象的歧义来解决编译器错误。如果您只是使用一个大名称空间中的少量标识符,

例如,我知道我的代码中只需要std名称空间中的“cout”,因此我将其称为:

using std::cout;
因此,我可以自由地将其用作:

cout << "Using namespaces like a boss!" << std::endl;
cout
使用
名称空间
标识符
是语言的一部分,因为在某些程序中它很有用。您正在平衡简洁性和灵活性与脆弱性,但最糟糕的情况是您必须通过消除您所指的
cout
对象的歧义来解决编译器错误。如果您只是使用一个大名称空间中的少量标识符,那么使用
语句来定位
通常是一种合理的折衷;如果列表开始变得过大,则使用名称空间std
可能会变得更容易

两者都不应在库头文件的at file作用域中使用,因为它们将在翻译单元的其余部分和make-break客户端程序中保持有效

在限定的范围内,在实现文件(
.cpp
.cc
或您使用的任何扩展)中,您基本上可以尝试使用
并在必要时修复歧义-您将了解什么最适合您

使用std::begin
使用std::end
是使用
语句特别有用的
的好例子,因为它们允许
begin(my_container)
匹配
std::begin()
,当后者对
my_container
有重载时,但是如果
my_container
begin
实际上在容器声明的任何名称空间中,
begin()

提示:通常最好写
[std::]cout将事情普遍标记为“糟糕的做法”以代替讨论真正的问题和权衡,这是一种糟糕的做法

有些技术可能不好,经常被误用。使用
指令,尤其是使用名称空间的
指令,可能会被误用,所以千篇一律的思维方式就是说它们在某种程度上是“坏的”

在单个.cpp文件中,您可以更好地控制名称空间,因此在文件范围内
使用std::cout
,甚至
使用名称空间my_funcy_名称空间
都可以,只要冲突的机会是可控的,并且可读性有所提高。在某种程度上,如果.cpp文件变得复杂,您可能会面临这样的风险:一个新名称被添加到与您的一个名称冲突的
某个有趣的名称空间中,而
使用名称空间某个有趣的名称空间将带来一些破坏您的代码的东西。但这可能是不太可能与一些稳定的东西,如升压或性病

对于每个函数,您也可以在本地使用
。但如果文件中的大多数函数需要相同的声明,则D.R.Y

当你在一个标题中使用这两个选项中的任何一个时,它会越过这条线进入一个非常糟糕的事情。然后,您也将名称从另一个名称空间泄漏到包含头的每个文件中。供选择和讨论。这真的很糟糕,因为当包含或不包含标题时,它会导致可怕的远距离操作错误,从而导致一些完全不相关的问题出现或消失。而且可能会破坏的不仅仅是“您的”代码,还可能会破坏使用您的头的其他人的代码

不要将名称泄漏到其他名称空间中

那么
使用
尤其是
使用命名空间
在标题中是否有冗余?如果标头是供选定的一组.cpp文件内部使用,该怎么办?那么,也许没关系。这就是饼干切割规则的问题所在,总是有例外,无缘无故地让一些假设的事情变得更糟,但最佳实践是可怕的

使用
的好处是可读性(不应低估)

缺点是可能出现名称冲突,特别是在其他一些随机代码中不可预测的名称冲突

明智地选择。仔细考虑设计的各个方面是最佳实践


(问一些好问题也不算太糟糕)。

语法不就是
使用std::cout<代码>使用名称空间std::coutstd::cout
是一个名称空间,而它不是,那么code>将用于
不会编译,因为
cout
不是命名空间。因此,我怀疑这是您在代码中使用的实际行。哦,对了!感谢您注意到这一点,这只是一个失误。我不认为任何人会说使用
using
指令,即使只是一种类型,也是一种不好的做法,这是对语言特性非常严格的看法。也就是说,我不会说
cout
std::cout
更容易阅读,而且通常一行只出现一次。依我看,这也是关于范围的。如果在文件范围内执行此操作,则问题要比在单个函数的范围内执行此操作,甚至比在函数内的范围块中执行此操作大得多。我个人通常愿意在这种情况下使用任何指令。感谢您的回答和关于提问的建议。我经常忘记编程不是绝对的,所以我只是继续问,好像这是好的编程必须使用的东西。这只是像我这样的早期程序员过早的行为。我可能会使用名称空间,这样我可以从学校练习中提高自己代码的可读性,但绝对不会在大型项目或类似项目中使用,这样我就不会从标题中得到任何泄漏。多亏了你的回答,现在我知道该怎么办了不客气。FWIW,我不是在暗示你有“切饼干”的心态,讽刺的是,我更担心你得到的建议。但是,如果这是长答案的简写,那么经验法则也很好。很好的讨论。