gpt4 book ai didi

c++ - 使复制的成员引用变量引用拷贝的成员而不是原始成员

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

考虑一个代码,其中一个结构有一个成员变量 bar 和一个引用 bar 的成员引用变量。例如:

struct Foo{
double bar;
double &bar_ref=bar;
};

void receivesFoo(Foo cp_foo){
//&cp_foo.bar_ref is the same as &my_foo.bar_ref
}

int main(){
Foo my_foo;
receivesFoo(my_foo);
return 0;
}

问题是,如果您复制 Foo,例如将其传递给函数,cp_foo.bar_ref 将引用 my_foo .bar 而不是 cp_foo.bar。我怎样才能让它引用 cp_foo.bar 呢?

注意:我使用这些引用变量是为了方便命名,如某些 tutorials 让它看起来像是一种可能的用途,我宁愿避免与宏相关的所有可读性问题。

最佳答案

一种替代方法是使用 member initializer listcopy constructor :

struct Foo{
double bar;
double &bar_ref;
Foo():bar_ref(bar){}
Foo(const Foo& a):bar_ref(bar){}
};

这似乎可行,但增加了必须维护两个具有相似代码的独立初始化列表的不便。如果你被允许使用 C++11,你可以通过以下方式避免它:

struct Foo{
double bar;
double &bar_ref=bar;
Foo(){}
Foo(const Foo& a){}
};

请注意,如果您使用指针,您可能会遇到类似的问题

正如@juanchopanza 评论的那样,您还可以通过使用 default 关键字来改进前面的示例。参见 this question了解更多详情:

struct Foo{
double bar;
double &bar_ref=bar;
Foo()=default;
Foo(const Foo& a){}
};

关于c++ - 使复制的成员引用变量引用拷贝的成员而不是原始成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32984875/

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