【发布时间】:2012-03-11 16:11:02
【问题描述】:
建议我们有一个 A 类对象的数组,而 A 类的构造函数需要两个参数,如下所示:
class A
{
public:
A( int i, int j ) {}
};
int main()
{
const A a[3] = { /*How to initialize*/ };
return 0;
}
如何初始化该数组?
【问题讨论】:
标签: c++
建议我们有一个 A 类对象的数组,而 A 类的构造函数需要两个参数,如下所示:
class A
{
public:
A( int i, int j ) {}
};
int main()
{
const A a[3] = { /*How to initialize*/ };
return 0;
}
如何初始化该数组?
【问题讨论】:
标签: c++
说:
const A a[3] = { {0,0}, {1,1}, {2,2} };
在较旧的编译器上,假设 A 具有可访问的复制构造函数,您必须说:
const A a[3] = { A(0,0), A(1,1), A(2,2) };
C++ 过去在数组方面相当不足(某些初始化根本不可能),而这在 C++11 中变得更好。
【讨论】:
-std=c++0x 编译。可访问意味着您可以访问它,即它不是私有的或=deleted。
=delete 是什么意思?
只要该类型具有复制构造函数(无论是合成的还是显式定义的),以下工作:
A array[] = { A(1, 3), A(3, 4), A(5, 6) };
这适用于 C++2003 和 C++ 2011。KerrekSB 发布的解决方案当然不适用于 C++ 2003,但可能适用于 C++ 2011(我不确定它是否适用于那里)。
【讨论】:
您可以提供一个默认构造函数并像往常一样初始化您的数组。初始化成功后,使用循环给每个成员重新赋值
【讨论】:
我觉得应该是这样的
const A a[3] = { A(1, 2), A(3, 4), A(5, 6) };
【讨论】: