我明白那个rand()
,作为示例函数<cstdlib>
,在全球和全球范围内都存在std
命名空间。
实际上,以下内容将编译无错误,即两次调用std::rand()
and rand()
将是合法的。
#include <cstdlib>
int main() {
std::rand();
rand();
}
它有什么用处以及它到底是如何实现的(该函数位于两个命名空间中)?
行为是未指定的行为按照标准。
根据标准,包括cstdlib
导入符号名称std
命名空间,也可能在全局命名空间中。如果您依赖于全局名称空间中包含的符号名称,那么您的程序是不可移植的,并且您依赖于特定实现的行为。
为了不依赖于实现行为,您必须:
Include cstdlib
并使用完全限定名称rand
.
std::rand()
参考:
C++11 标准:D.5 C 标准库头文件
Para 3:
[ 示例:标题<cstdlib>
确实在命名空间内提供其声明和定义std
。它还可以在全局命名空间内提供这些名称。标题<stdlib.h>
确实在全局命名空间中提供了相同的声明和定义,就像在 C 标准中一样。它还可以在命名空间内提供这些名称std
。 —结束示例]
好读:
我应该在 C++ 程序中包含 或 吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)