【发布时间】:2019-10-03 01:32:12
【问题描述】:
给定一个唯一的 (std::uint64_t 类型) 整数向量,如果我将 (std::uint64_t 类型) 向量转换为 (std::int64_t 类型) 整数向量,它会保证唯一吗?
像这样投射
std::vector<std::uint64_t> unsignedVec;
std::vector<std::int64_t> signedVec( unsignedVec.begin(), unsignedVec.end() );
【问题讨论】:
-
生成、投射是什么意思?
-
也许吧。你将如何生成
std::int64_t的向量? -
“生成”是什么意思?如果您的意思是“强制转换”,则您的原始整数将小于或等于
int64可表示的最大值(在这种情况下与原始uint64_t数字相同),或者您的程序将表现出未定义的行为,并且任何事情都可能发生. -
@SergeyA 将无符号类型转换为有符号类型不是未定义的行为。溢出的有符号整数是,而不是强制转换。
-
@Resurrection 将积分转换为无法表示的范围是未定义的,这正是我所说的。
标签: c++ c++11 language-lawyer