如果这个问题已经得到回答,我们深表歉意。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main () {
srand( time(NULL) );
cout << rand();
}
“隐式转换失去整数精度:’time_t’(又名’long’)到’unsigned int’”
当我执行上面的代码时,我得到的错误消息是什么。我正在使用 xcode 4.6.1。现在,当我使用不同的编译器(例如来自 codepad.org 的编译器)时,它执行得非常好,生成看起来像随机数的东西,所以我假设这是我需要解决的 xcode 问题?
我刚刚开始编程,所以在这方面我是一个完整的初学者。我的代码有问题还是我的编译器有问题?
任何帮助,将不胜感激!
原文由 user2576878 发布,翻译遵循 CC BY-SA 4.0 许可协议
您正在隐式丢失精度,因为
time()
返回一个long
大于目标上的unsigned int
。为了解决这个问题,您应该明确地转换结果(从而消除“隐式精度损失”):鉴于现在是 2017 年,我正在编辑这个问题以建议您考虑
std::chrono::*
在<chrono>
--- 中定义的功能作为 C++11 的一部分。你最喜欢的编译器是否提供 C++11?如果没有,那真的应该!要获取当前时间,您应该使用:
当
time()
有效时,我为什么要为此烦恼?IMO,一个理由就足够了:清晰、明确的类型。当您在足够大的团队中处理大型程序时,知道传递的值是代表时间间隔还是“绝对”时间,以及什么数量级是至关重要的。使用
std::chrono
您可以设计可移植的接口和数据结构,并跳过 is-that-timeout-a-deadline-or-milliseconds-from-now-or-wait-was-it-seconds蓝调。