C++ 为什么我要包括<;cmath>;我也需要使用名称空间std?

C++ 为什么我要包括<;cmath>;我也需要使用名称空间std?,c++,C++,为什么我需要包含才能使用函数pow(),并且还需要使用命名空间std声明 STD::POW//COD>应该在全局命名空间中,因为它来自C标准库,C++中完全不同。OK,现在很清楚,谢谢你的ANWER。我更喜欢不说:“避免使用 ”,但只需向OP咨询有关公共问题的内容。例如,您可以在函数中使用来定义作用域,也可以是值得的。可以说,这可能与在.cpp中使用namespace语句声明的问题相同。最好不要使用它。不,在块范围中使用它没有什么错。反对的论点不适合这里。@LightnessRacesinOrb

为什么我需要包含
才能使用函数
pow()
,并且还需要使用命名空间std声明


要访问在命名空间std中声明的名称(比如函数
pow()
),可以通过两种方式访问它:使用命名空间访问前缀
std::
(即
std::pow()
),或者可以使用命名空间std
声明
。然而,正如@Yksisarvinen所提到的,您应该避免使用
使用名称空间

其他人(甚至您)可能会定义从同一模块可见的另一个函数
pow()。这将给编译器(调用哪个函数?)和链接器(如果有两个函数的名称完全相同,它将如何区分它们?)带来歧义。这个问题可以通过将函数放入名称空间来解决。例如,如果您创建一个
命名空间george
并在那里定义一个函数
pow()
,链接器将分离这些函数,编译器将有机会解决歧义


使用namespace std
是一种不推荐的快捷方式,它简化了标准函数和类的使用,以避免可能出现的歧义。但是,即使在这种情况下,使用全名也可以解决此问题。

您不需要使用命名空间std
和。为什么需要包含
?因为这里声明了
std::pow()
函数。编译器需要知道声明,然后才能在代码中使用某个函数,因此您需要包含其他头文件。您不清楚您在问什么。当某个名称空间中有某个内容时,您需要使用名称空间进行限定。是的,我知道使用std::pow()比使用std::pow()更好,但是为什么我需要使用std而不仅仅是没有std:?因为链接器(组成编译过程的程序)找不到名称
pow
。为了让链接器正确地知道这个名称是什么,您需要指定名称的实际声明位置。这就是语言的工作方式。因为
std::pow
std
名称空间中?名称空间就是这样做的。如果你认为<>代码> STD::POW//COD>应该在全局命名空间中,因为它来自C标准库,C++中完全不同。OK,现在很清楚,谢谢你的ANWER。我更喜欢不说:“避免使用<命名空间< /代码> <代码>”,但只需向OP咨询有关公共问题的内容。例如,您可以在函数中使用
来定义作用域
,也可以是值得的。可以说,这可能与在.cpp中使用namespace
语句声明
的问题相同。最好不要使用它。不,在块范围中使用它没有什么错。反对的论点不适合这里。@LightnessRacesinOrbit您能详细说明为什么反对在函数中使用此语句的同一论点无效吗?为什么无效?如何将名称泄漏到其他标题中,以及在多个函数、定义和代码位中。。。如果你把它限制在你的一个小街区里?这就是积木的全部意义。