如果这个问题已经得到解答,我们深表歉意。
#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 问题?
我刚刚开始编程,所以在这方面我是一个完全的初学者。是我的代码有问题还是我的编译器有问题?
任何帮助,将不胜感激!
“隐式转换会丢失整数精度:'time_t'(又名'long')到'unsigned int'”
你隐式地失去了精度,因为time()
返回一个long
它大于unsigned int
在你的目标上。为了解决此问题,您应该显式转换结果(从而消除“隐式精度损失”):
srand( static_cast<unsigned int>(time(nullptr)));
鉴于现在是 2017 年,我正在编辑这个问题,建议您考虑提供的功能std::chrono::*
定义于<chrono>
作为 C++11 的一部分。您最喜欢的编译器提供 C++11 吗?如果没有,那确实应该!
要获取当前时间,您应该使用:
#include <chrono>
void f() {
const std::chrono::time_point current_time = std::chrono::system_clock::now();
}
我为什么要为此烦恼time()
works?
IMO,只有一个原因就足够了:清晰、明确的类型。当您在足够大的团队中处理大型程序时,了解传递的值是否代表时间间隔或“绝对”时间以及大小是至关重要的。和std::chrono
您可以设计可移植的接口和数据结构,并跳过“是不是截止日期或从现在起的毫秒数或等待是秒的忧郁症”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)