gpt4 book ai didi

c++ - rand() 为什么以及如何存在于 cstdlib 的全局和 std 命名空间中?

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:49 25 4
gpt4 key购买 nike

我明白 rand() ,作为来自 <cstdlib> 的示例函数, 存在于全局和 std 中命名空间。

实际上,以下内容将编译无误,即两次调用 std::rand()rand()将是合法的。

#include <cstdlib>    
int main() {
std::rand();
rand();
}

这有什么用,它是如何实现的(函数在两个命名空间中)?

最佳答案

根据标准,该行为是特定行为
根据标准,包括 cstdlibstd 中导入符号名称命名空间并且可能在全局命名空间中。如果您依赖于包含在全局命名空间中的符号名称,那么您的程序是不可移植的,并且您依赖于特定实现的行为。


要不依赖于你必须的实现行为:

包括cstdlib并为 rand 使用完全限定名称.

std::rand()

引用资料:

C++11 标准:D.5 C 标准库头文件
第 3 段:

[ Example: The header <cstdlib> assuredly provides its declarations and definitions within the namespace std. It may also provide these names within the global namespace. The header <stdlib.h> assuredly provides the same declarations and definitions within the global namespace, much as in the C Standard. It may also provide these names within the namespace std. —end example ]


好读:
Should I include <xxxx.h> or <cxxxx> in C++ programs?

关于c++ - rand() 为什么以及如何存在于 cstdlib 的全局和 std 命名空间中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15037456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com