gpt4 book ai didi

c++ - std::map operator[] 需要使用空构造函数创建 A

转载 作者:行者123 更新时间:2023-11-27 23:38:05 24 4
gpt4 key购买 nike

#include <map>
class B {
public:
B() {}
};

class A {
public:
A(B b) {

}
};

int main()
{
std::map<int, A> list;
list[0] = A(B());

return 0;
}

编译器提示 A 应该有一个像这样的无参数构造函数:A(){} 因为行 list[0] = A (B());。我猜 list[0]; 首先创建一个默认的 A 对象,然后在其上执行 operator=(const A& a) 所以它可以复制 A(B()); 对象。

但是我不想为我的 A 类创建默认的无参数构造函数,因为它确实应该用 B 对象初始化。

我设法克服了这个问题

list.insert(std::pair<int, A>(0, A(B()));

然后我注意到下面一行:

A a = list[0];

不会给出任何错误。对我来说,A a 应该使用不存在的空 A() 构造函数创建一个默认的 A 对象,然后是 运算符= 将被应用。为什么这一行没有报错?

最佳答案

A a = list[0];

不使用默认构造函数和赋值运算符。它为您的类调用复制构造函数。复制构造函数是隐式定义的。

关于c++ - std::map<int, A> operator[] 需要使用空构造函数创建 A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57651185/

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