gpt4 book ai didi

c++ - 按值传递结构,并将另一个结构作为其成员之一,会更改该成员的成员的值

转载 作者:行者123 更新时间:2023-11-30 18:09:09 26 4
gpt4 key购买 nike

很抱歉标题令人困惑,但它基本上说明了一切。这是我正在使用的结构(在 OpenCV 中找到):

struct CV_EXPORTS CvRTParams : public CvDTreeParams
{
bool calc_var_importance;
int nactive_vars;
CvTermCriteria term_crit;

CvRTParams() : CvDTreeParams( 5, 10, 0, false, 10, 0, false, false, 0 ),
calc_var_importance(false), nactive_vars(0)
{
term_crit = cvTermCriteria( CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 50, 0.1 );
}
}

typedef struct CvTermCriteria
{
int type;
int max_iter;
double epsilon;
}
CvTermCriteria;

CV_INLINE CvTermCriteria cvTermCriteria( int type, int max_iter, double epsilon )
{
CvTermCriteria t;

t.type = type;
t.max_iter = max_iter;
t.epsilon = (float)epsilon;

return t;
}

现在,我初始化一个 CvRTParams 结构并为其成员设置值:

 CvRTParams params;
params.max_depth = 8;
params.min_sample_count = 10;
params.regression_accuracy = 0;
params.use_surrogates = false;
params.max_categories = 10;
params.priors = priors;
params.calc_var_importance = true;
params.nactive_vars = 9;
params.term_crit.max_iter = 33;
params.term_crit.epsilon = 0.1;
params.term_crit.type = 3;

然后调用对象的函数,将 params 作为参数:

CvRTrees* rt = new CvRTrees;
rt->train(t, CV_ROW_SAMPLE, r, 0, 0, var_type, 0, params);

现在会发生什么?值(value)观...

params.term_crit.max_iter
params.term_crit.epsilon
params.term_crit.type

变了!它们不再是 33、0.1 和 3,而是类似于 3、7.05541e-313 和 4,并且在 CvRtrees::train() 函数的整个持续时间内......

最佳答案

当我写完这个问题时,我找到了答案。所以我想如果有人遇到同样的问题我还是会发帖。代码本身并没有错误(或者至少没有完全错误)。不过,我在 ppc 处理器 (G5) 上使用 MacOS X 和 apple-gcc。我使用 -fast 标志进行优化。 删除 -fast 标志(仅留下 -O3)解决了问题。

关于c++ - 按值传递结构,并将另一个结构作为其成员之一,会更改该成员的成员的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2685555/

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