gpt4 book ai didi

c++ - g++ 4.9.3 提示 friended ctor 对 .emplace_back() 是私有(private)的,但喜欢 .push_back()

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:01:24 26 4
gpt4 key购买 nike

我肯定遗漏了关于 emplace() 和 friend 的其中一个优点。这是一个完整的最小示例,它重现了 g++ 4.9.3 的问题:

class Foo
{
public:
class Bar
{
private:
friend class Foo;
Bar(Foo &foo) : foo(foo) {}
Foo &foo;
};

Bar &getBar()
{
//bars.push_back(*this); // works fine
bars.emplace_back(*this); // Foo::Bar::Bar(Foo&) is private
return bars.back();
}
private:
std::vector<Bar> bars;
};

最佳答案

emplace_back中,容器就是构造Bar的容器。但是那个构造函数是私有(private)的,容器不是 friend ,所以它失败了。

但是 push_back(*this) 等同于 push_back(Bar(*this))。也就是说,是 Foo 进行构造,它是一个友元。

关于c++ - g++ 4.9.3 提示 friended ctor 对 .emplace_back() 是私有(private)的,但喜欢 .push_back(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37768339/

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