警示后人 & .size() 的一些问题
查看原帖
警示后人 & .size() 的一些问题
595180
xixihaha2021楼主2025/1/7 17:58

s.size() 直接和 long long 运算的时候需要强制转型。例如 t = -cnt0 * (ll)s.size() / cnt1

现象:实际返回值是 string::size_type 类型的,除数/模数是负数时会出问题。

例子:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n = -2;
string s = "absbs";
int main(){
	ll k = s.size() % n,t = (ll)s.size() % n;
	printf("%lld %lld",k,t);
	return 0;
}

但是不作运算或者加减乘的时候都没有问题,不知道为什么,也许是 ub

2025/1/7 17:58
加载中...