我代码中使用了一个字符串哈希的模板类,定义如下:
template<int base,int mod> struct hs{
static modint<mod> pw[N],inv[N];
modint<mod> _val[N],*val=_val+1;
hs(){
if(!pw[0]){
pw[0]=inv[0]=1;
modint<mod> z=qpow<mod>(base,-1);
for(int i=1;i<N;i++) pw[i]=pw[i-1]*base;
for(int i=1;i<N;i++) inv[i]=inv[i-1]*z;
}
}
void get(string& s){
int tmp=s.length();
for(int i=0;i<tmp;i++) val[i]=val[i-1]+pw[i]*s[i];
}
modint<mod> query(int l,int r){return (val[r]-val[l-1])*inv[l];}
};
template<int base,int mod> modint<mod> hs<base,mod>::pw[N];
template<int base,int mod> modint<mod> hs<base,mod>::inv[N];
hs<141592,998244353> a1,l1,r1;
hs<653589,998244853> a2,l2,r2;
hs<793238,989244353> a3,l3,r3;
string a,l,r;
int n,m,k;
modint<998244353> _s[N],*s=_s+2,_f[N],*f=_f+1;
int cmp(bool flg,int pos){
//
}
int main(){
decltype(a1)();
decltype(a2)();
decltype(a3)();
}
请问为什么不加main里面那3个构造函数的话pw和inv的值就是0?不是在定义a1等变量的时候就执行过构造函数了吗?qwq?