当一个是size_t类型而另一个是<0
Why mod operation return 0 when one is size_t type and the other is <0?
有c++代码:
string s = "abc";
size_t len = s.length();
cout<<(-1%len)<<endl;//print 0
但是如果将size_t更改为int:
string s = "abc";
int len = s.length();
cout<<(-1%len)<<endl;//print -1
为什么会发生这种情况,任何人都可以解释,谢谢!
底线是您的第一个代码片段,可以归结为-1 % size_t{3}
,并从将-1
转换为类型size_t
开始,如果是32位程序,则产生FFFF FFFF;如果是64位程序,产生FFFF。两者都是3的倍数,所以mod运算符返回0
。在另一种情况下,有两个(带符号的)int
值,-1 % 3
返回-1
,正如您所期望的那样。
相关文章:
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- C++将一个指针分配给另一个指针时执行的类型检查
- 如何包装一个函数以适应另一个函数的所需类型
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但得到不兼容的指针类型
- 如何构造一个类型特征,可以判断一个类型的私有方法是否可以在另一个类型的构造函数中调用?
- 缺少类型说明符和另一个问题
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 如何在类 A 中传递类型名 T 以在另一个类 B 中使用
- 将积分类型的数组作为另一个不相关的积分类型的阵列进行访问的安全且符合标准的方法
- c ++ 我是否需要手动删除指向另一个具体类型的 void* 指针?
- 如何在另一个类中调用类型类的向量?
- 使用 SFINAE 测试是否可以将一个指针类型static_cast到另一个指针类型
- 检查数值类型是否是另一个数值类型的子集
- 无法从派生类型的作用域访问另一个实例的受保护成员
- 另一个:从"常量类型*"到"类型*"的转换无效
- 为什么直接传递"this"指针来存档是一个错误,而另一个相同类型的指针是可以的?
- C++:在另一个类中作为类型类
- 将 std::variant 转换为另一个具有类型子集的 std::variant
- 类的成员是否可以与其类型(另一个类)命名相同的名称