gpt4 book ai didi

c++ - 静态初始化 C++,未设置值

转载 作者:太空宇宙 更新时间:2023-11-04 15:20:14 25 4
gpt4 key购买 nike

我正在编写一个包含几个文件的程序,我们假设所有包含文件都可以。这是缩短的代码。ZZ.hpp:

class ZZ
{
public:
ZZ(ZZ const & a) { mpz_init_set(data, a.data); }
ZZ(int a = 0) { mpz_init_set_si(data, a); }
.
.
.

ZZmodN.hpp:

template <unsigned ID>
class ZZmodN
{
public:
ZZmodN() = default;
ZZmodN(ZZmodN const &) = default;
template <typename T>
ZZmodN(T const & a) : value(a) { value %= modulus; }
.
.
.
private:
ZZ value;
static ZZ modulus;
};
template <unsigned ID>
ZZ ZZmodN<ID>::modulus(19);
.
.
.

多项式.h:

class Polynomial{
public:
std::vector<ZZmodN<0> > co;
Polynomial(){};
Polynomial(ZZmodN<0> a){
co.push_back(a);
}
.
.

最后是 Field.h:

#include "Polynomial.h"
class Field{
public:
static Polynomial f;
Polynomial poly;
Field(){}
.
.
};
Polynomial Field::f = Polynomial(1);

问题是:当我调用最后一行 (*) 时收到浮点异常,因为当值 %= modulus 时 'modulus' = 0;叫做。为什么是 0 而不是 19?我检查了一下,调用了 19 的 ZZ 构造函数。请帮忙。

最佳答案

您遇到的问题是 static initialization order fiasco .在您的情况下,链接器决定初始化 Field::f在它初始化之前 ZZmodN<0>::modulus .

关于c++ - 静态初始化 C++,未设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21055076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com