【发布时间】:2014-01-11 15:21:54
【问题描述】:
在学习新功能时,我喜欢在调用它们时包含全名(例如,std::cin 而不是 cin)。是否有类似的方法来包含函数来自的标头?例如,有没有办法指定排序函数来自 <algorithm> 标头,而不是 <iomanip> 标头或其他?
例如,如果我可以使用类似std::algorithm::sort 而不是std::sort 来调用sort,那就太棒了。标准库中内置了如此多的标头,仅使用 std::* 实际上并不能提供那么多信息,并且很少具体告诉我 * 的来源。
显然,随着我对 C++ 的掌握越来越好,这可能没有必要,但我的目标是了解哪些函数与哪些标头一起使用,以便更好地学习标准库。
如果没有这种方法来指定函数,是否有一个函数可以用来确定哪个标头提供了该函数?
最终,我认为列出您将使用的与每个标题相关联的函数将是一种很好的编码习惯:
#include <iostream> //std::cout, std::cin
这样人们就可以弄清楚什么来自哪里!考虑到 c++ 社区对名称清晰的令人钦佩的痴迷,为什么没有做更多的事情?
注意:这个问题是唯一可能的,因为 C++ 是一种非常非 Pythonic 的语言。毕竟“显式胜于隐式”。 :)
【问题讨论】:
-
不,这根本不是一个有用的功能。命名空间已经服务于......好吧,提供命名空间。文件和/或标头通常只是一个可以更改的实现细节(尽管不适用于标准库)。
-
Kerrek:我的观点是,标准命名空间非常庞大,并且有很多可能的头文件,因此在代码可读性方面,简单地使用 std::* 并不是特别有用。我见过包含 30 个头文件的代码,其中许多来自标准库,但不知道从哪里来。我知道 std::* 不是为了可读性,而是为了避免名称冲突,但为什么 不 将其设置为 11 并使其完全透明您的名称来自哪里?跨度>
-
@neuronet 不要以具有 30 个标头的代码开头。它可能是压倒性的,它不必是那样的。从基础开始,使用简单的代码,逐步向上。
-
这正是你在 Java 中可以做到的,但在 c++ 中却不行 :) 但是,我认为你必须搜索一个 IDE,它可以帮助你了解每个函数的来源,
-
多年后我仍然很高兴我问了这个问题,至少可以帮助我了解为什么 Python 相比之下如此干净和漂亮。 :) PS 我现在是一名 Python 开发人员。
标签: c++