gpt4 book ai didi

c++ - srand (time (null)) 导致编译器警告 : implicit conversion loses integer precision

转载 作者:IT老高 更新时间:2023-10-28 21:54:19 31 4
gpt4 key购买 nike

如果这个问题已经得到解答,我们深表歉意。

#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 问题?

我刚刚开始编程,所以在这方面我是一个完整的初学者。我的代码有问题还是我的编译器有问题?

任何帮助将不胜感激!

最佳答案

"implicit conversion loses integer precision: 'time_t' (aka 'long') to '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()有效吗?

IMO,一个原因就足够了:清晰、明确的类型。当您在足够大的团队中处理大型程序时,知道传递的值是代表时间间隔还是“绝对”时间,以及什么数量级是至关重要的。与 std::chrono您可以设计可移植的接口(interface)和数据结构,并跳过 is-that-timeout-a-deadline-or-milliseconds-from-now-or-wait-was-it-seconds blues。

关于c++ - srand (time (null)) 导致编译器警告 : implicit conversion loses integer precision,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17618264/

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