我正在尝试使用 GCC 4.7.2 (MinGW) 编译以下简单代码。这里我使用 C++11 特性——非静态成员初始化器:
#include <iostream>
using namespace std;
struct A
{
int var;
A()
{
cout << "A()\n";
}
A(int i)
{
cout << "A(int i)\n";
var = i;
}
A(const A&) = delete;
};
struct B
{
A a = 7;
};
int main()
{
B b;
cout << "b.a.var = " << b.a.var;
return 0;
}
由于删除了此处不需要的复制构造函数,此代码无法编译。以下是错误:
main.cpp:27:11: error: use of deleted function 'A::A(const A&)'
main.cpp:13:5: error: declared here
main.cpp: In constructor 'constexpr B::B()':
main.cpp:25:8: error: use of deleted function 'A::A(const A&)'
main.cpp:13:5: error: declared here
如果我像这样实现复制构造函数:
A(const A& a)
{
cout << "A(const A&)\n";
var = a.var;
}
然后代码编译得很好,程序给了我预期的输出:
A(int i)
b.a.var = 7
所以这意味着没有使用复制构造函数,但是为什么我不能删除它呢?
编辑:感谢您的回答。如果我使用=
. 要解决这个问题,我需要实现移动构造函数或使用直接初始化语法A a{7}
。