srand (time (null)) causes compiler warning: implicit conversion loses integer precision(Srand(time(NULL))导致编译器警告:隐式转换丢失整数精度)
问题描述
如果此问题已得到回答,请原谅。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main () {
srand( time(NULL) );
cout << rand();
}
"隐式转换丢失整数精度:‘time_t’(又名‘long’)到‘unsign int’"
是我在执行上面的代码时收到的错误消息。我使用的是Xcode4.6.1。现在,当我使用不同的编译器时,例如来自coadead.org的编译器,它执行得非常好,生成看起来像随机数的东西,所以我假设这是一个Xcode问题,我需要解决?
我刚刚开始编程,所以在这方面我完全是个初学者。是我的代码有问题还是编译器有问题?
如有任何帮助,我们将不胜感激!
推荐答案
由于"隐式转换丢失整数精度:‘time_t’(又名‘long’)到‘unsign int’"
time()
返回的long
大于目标上的unsigned int
,因此您正在隐式失去精度。为了解决此问题,您应该显式转换结果(从而消除"隐式精度损失"):
srand( static_cast<unsigned int>(time(nullptr)));
考虑到现在是2017年,我编辑这个问题是为了建议您将
<chrono>
中定义的std::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
,您可以设计可移植的接口和数据结构,并跳过is-that-timeout-a-deadline-or-milliseconds-from-now-or-wait-was-it-seconds Blues。
这篇关于Srand(time(NULL))导致编译器警告:隐式转换丢失整数精度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Srand(time(NULL))导致编译器警告:隐式转换丢失整数精度
基础教程推荐
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- C++,'if' 表达式中的变量声明 2021-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 设计字符串本地化的最佳方法 2022-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01