推断 c++ 中函数的实现
Inferring the implementation of a function in c++
我正在浏览 c++ 中rand()
函数的文档,它说
该函数访问和修改内部状态对象,这可能会导致并发调用 rand 或 srand 的数据争用。一些库提供了一个替代函数,明确避免了这种数据竞争:rand_r(不可移植)。允许C++库实现来保证调用此函数时不会出现数据争用。
作为一个更普遍的问题,我如何确定我正在调用函数的 c++ 实现(在这种情况下rand
)?
- 在具有
.cc
或.cpp
扩展名的文件中调用rand()
。 - 或者,任何可以确保这一点的特定标头
我问这个问题是因为我的理解是,当我使用cstdlib
标头时,它反过来调用该 (stdlib.h
) 的 c 实现。如果不是这种情况,那么 c++ 是否为所有 c 函数提供自己的实现?
我认为你问错了问题。
您已经阅读过,C++库实现都可以为您提供没有数据争用的版本。它们是允许的,但不是必需的。如果你有一些无所不知的预言机,能够告诉你你是否正在使用C++实现,如果它告诉你你是,这会解决你的问题吗?不,不是真的,因为你仍然不知道这种实现是否能保证没有数据竞争。也许会,但你不确定。
所以你必须问一个正确的问题:我怎么知道我正在使用的功能是否保证了这一点?答案是:检查您正在使用的库的特定文档!我想你正在阅读兰德的 cplusplus.com 页面。这是一个通用站点,与特定库无关,因此它不会帮助您回答此问题。相反,您使用的是什么编译器和标准库?检查他们的文档。如果作者声明他们的rand
功能保证是无种族的,那么继续使用它。否则,保守并假设有一些种族,并且不要使用它。
顺便说一句,很多人会告诉你应该避免那个网站,因为它不是很可靠。一般来说,首选 cpp 首选项。它说
rand() 是否是线程安全的,这是实现定义的。
"定义实施"的意思正是我所说的。如果你继续阅读,它还会列出一些其他问题(它生成的数字毕竟不是随机的),并且
建议使用 C++11 的随机数生成工具来替换 rand()。
- 在命名空间内部还是外部实现 c++ 函数?
- 如何在C++中实现函数(f)(x)(y, z)(g)(r)
- 如何在C++中实现函数上的二叉搜索?
- 键按下事件错误 Qt 实现函数时
- 在子类之外实现函数导致未知错误
- 通过模板滥用实现函数式C++
- C++,实现函数"int next(std::string param)"时出现奇怪的编译器错误
- 我正在尝试创建自己的 strcat() 函数,而不是使用库实现函数<cstring>
- 如果未实现函数,则在链接时启用错误
- 用函数参数实现c++函数指针
- 如何在Android SDK中调用和实现C++函数
- 在 C++ RCPP 中实现 R 函数
- 实现函数模板填充多维对象
- 类的层次结构,试图在基本级别实现函数
- 用c++实现函数对象的自动检测类型
- 用shared_ptrs实现函数模板的C++实例化
- 在类中实现函数导致错误:成员引用基类型'ifstream (string)'不是结构或联合
- 用c++实现S函数.生成错误
- 引用可以用于实现函数重写吗
- 如何在c++中实现函数超时