作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
#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/
我是一名优秀的程序员,十分优秀!