gev*_*ang 2 c++ namespaces std
据我所知rand(),作为示例函数<cstdlib>,存在于全局和std命名空间中.
实际上,以下将编译没有错误,即调用std::rand()和rand()将是合法的.
#include <cstdlib>
int main() {
std::rand();
rand();
}
Run Code Online (Sandbox Code Playgroud)
它的用途是什么以及它是如何实现的(函数在两个命名空间中)?
行为是按照标准指定的行为.
根据标准,包括cstdlib在std命名空间中导入符号名称,可能还在Global名称空间中.如果您依赖于全局命名空间中包含的符号名称,那么您的程序是不可移植的,并且您依赖于特定实现的行为.
要不依赖于实施行为,您必须:
包含cstdlib并使用完全限定名称rand.
std::rand()
Run Code Online (Sandbox Code Playgroud)
参考文献:
C++ 11标准:D.5 C标准库标题
第3段:
[示例:标头
<cstdlib>确实在命名空间中提供其声明和定义std.它还可以在全局命名空间中提供这些名称.标题<stdlib.h>肯定在全局命名空间中提供相同的声明和定义,就像在C标准中一样.它还可以在命名空间中提供这些名称std. - 末端的例子]
好读:
我应该在C++程序中包含<xxxx.h>还是<cxxxx>?
| 归档时间: |
|
| 查看次数: |
1918 次 |
| 最近记录: |