如何检查std中是否存在变量或函数?(在c ++中)

时间:2016-02-11 21:35:02

标签: c++ c++11

我在我的代码中使用std(using namespace std)(我知道它不太好,应该避免)然后我想知道哪些名称可用于变量或函数,哪些已经是占用所以我搜索了std变量列表&功能,但我没有找到它。

PS。我的代码实际上是一个功课,所以没有扩大的梦想,也导致它是一个功课我应该使用std (:|)(即使我不是我只是好奇的答案)。所以我的问题是什么是vars&现在在std 中存在的函数

2 个答案:

答案 0 :(得分:7)

std中没有明确的名称列表 - 它可以随时展开,并且是为此目的而创建的。因此,一劳永逸地停止using命名空间。

换句话说,C ++标准规定了具有的名称,但绝不限制设置的总名称。实现通常会将许多其他辅助函数或classess放入此命名空间。

答案 1 :(得分:1)

正如其他人所说,停止using namespace std - 这是糟糕练习。

我还建议您停止using任何名称空间。通过这种方式,您的代码可以更好地读取,避免隐藏事物和命名冲突,最重要的是,您始终负责代码库:您知道您使用的内容来自何处以及它们的更广泛的范围/目的。这可以使您的代码更易于维护:例如,更容易看到哪些标头未被使用。什么样的功能只是辅助/内部等。

这主要是品味问题,但我进一步建议您自己使用名称空间或详细的描述性名称(至少对于那些没有很短范围的对象)。所有现代IDE都提供自动完成功能,因此您甚至不必多次输入。在我的代码中,我使用如下内容:

bool has_the_loader_finished;
bool should_the_program_quit;
void helper::setup::setup_animation();

一直以来。这样一来。我的代码中并不需要很多注释,大部分内容都是不言自明的,因此我只保留对特殊内容的注释和b。我确信没有名字冲突和c。我不必花时间尝试调试/重构代码,我不再记得像

这样的东西
int i;
bool flag;
void setup();

代表..

当然有using直观的情况,例如:

using std::placeholders
ExampleFunction f = std::bind(&Object::hello, &instance,_1); // instead of std::placeholders::_1

using namespace std::chrono_literals;
auto halfmin = 30s; //instead of std::chrono_literals::30s

using ms = std::chrono::milliseconds; // this is an alias basically

然而,良好的做法是始终如一。限制使用您计划使用的特定事项,例如:using std::placeholders而不是using std b。使用别名或typedef和c。 尽可能多地限制using(和typedefs / aliases)的范围,例如:

int someFunction() {
  using namespace std;
  // no more than a 20-30 lines of code here
}

// someSmallFile.cpp
using namespace std; // this is valid in the body of this file only

最后,绝不在标头文件中使用using namespace 。这会将此命名空间的内部暴露给包含该文件的所有翻译单元,并且您的客户无需了解它...