【发布时间】:2020-09-15 09:29:53
【问题描述】:
我正在做如下的事情:
int num_of_pairs(std::vector<char>& str)
{
for(int i = 0; i < str.size() - 1; i++)
{
if(str[i] == str[i + 1])
# Do something
}
}
但是当我传递一个长度为 0 的空向量时,for 循环仍然会执行并引发索引错误。 vector.size() 在我的编译器上返回一个 size_t,它 unsigned int64 并且我认为编译器正在计算 arr.size() - 1 作为 size_t 然后转换为 int 以检查条件,因为当 arr.size() 为 0 时 arr .size() - 1 变成一个非常大的数字,大概是 2^64 - 1 。
当我这样做时也会发生同样的事情
int n = 50000;
unsigned int a = n*(n + 1);
它给了我垃圾,因为 50000*50000 变成了 25 亿,这对于有符号整数来说是溢出的,但无符号整数可以存储它。
我有两个问题,
- 我的想法是否正确(我认为我是,但想确认,因为我不是 netwon 或 einstien)
- 有什么方法可以避免这种情况
【问题讨论】:
-
直截了当:有显式和隐式的转换。强制转换始终是程序员完成的显式转换。但是编译器完成了许多不同类型的隐式转换。因此,不存在“隐式强制转换”之类的东西。
-
如果给出示例,可能会使用
std::adjacent_find(所以只需使用迭代器而不是索引)。
标签: c++ vector visual-c++ implicit-conversion