gpt4 book ai didi

c++ - std::vector 当 Foo 的一些成员是引用时

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:39 25 4
gpt4 key购买 nike

只要有可能,我通常更喜欢使用引用而不是指针,在我看来,它使语法更清晰。在这种情况下,我有一个类:

class Foo
{
public:
Foo(Bar & bar) : bar_(bar) {}

private:
Bar & bar_;
};

operator=()被编译器隐含地删除了这样一个类,因为一旦设置了引用,它就不能改变(我可以在技术上定义我自己的不改变 bar_,但这不是必需的行为,所以我宁愿如果我尝试分配一个 foo,编译器会提示)。

我需要的是 std::vector<Foo> v; .这在 C++11 之前是不可能的,因为模板参数必须是 CopyAssignable。事实上,当我调用 v.push_back(Foo(bar)); ,编译器提示。但我觉得自从 C++11 和 Move 语义以来这是可能的。

我的问题是:是否有使用 C++11 的解决方法可以构建这样的 vector ,或者我是否陷入这种情况并且无法使用指针而不是引用?如果有解决方法,我将非常感谢代码片段,因为我不熟悉 move 语义。

最佳答案

emplace_back 之所以能够胜任,是因为完美转发。

#include <vector>                                                                  

class Bar{};
class Foo
{
public:
Foo(Bar & bar) : bar_(bar) {}

private:
Bar & bar_;
};
using namespace std;
int main() {
vector<Foo> v;
Bar bar;
v.emplace_back(bar);
}

您还可以将引用单独存储在容器中 std::reference_wrapper std::vector<std::reference_wrapper<int>> v一样使用

关于c++ - std::vector<Foo> 当 Foo 的一些成员是引用时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19801932/

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