【发布时间】:2010-04-22 01:38:02
【问题描述】:
我正在尝试理解boost array。 code 可以从作者的网站上轻松阅读。
在设计原理中,作者 (Nicolai M. Josuttis) 提到以下两种类型的初始化是可能的。
boost::array<int,4> a = { { 1, 2, 3 } }; // Line 1
boost::array<int,4> a = { 1, 2, 3 }; // Line 2
在我对 g++(4.1.2 版)的实验中,第 1 行可以正常工作,但第 2 行不行。 (第 2 行产生以下内容:
warning: missing braces around initializer for 'int [4]'
warning: missing initializer for member 'boost::array<int, 4ul>::elems'
)
不过,我的主要问题是,第 1 行是如何工作的?我尝试编写一个类似于 array.hpp 的类并使用第 1 行之类的语句,但这不起作用:-(。错误是
typedef array< unsigned int, 10 > MyArray;
MyArray b = { { 1, 2, 3 } }; // Line 74
array_test.cpp:74: error: in C++98 'b' must be initialized by constructor, not by '{...}'
array_test.cpp:74: error: no matching function for call to 'array<unsigned int, 10u>::array(<brace-enclosed initializer list>)'
array.h:16: note: candidates are: array<unsigned int, 10u>::array()
array.h:16: note: array<unsigned int, 10u>::array(const array<unsigned int, 10u>&)
有人可以解释一下吗?我需要注意第 1 行中发生的某些特定于提升的事情吗?
【问题讨论】:
-
正如 Potatoswatter 提到的,这仅适用于 POD 类型。然而,可能值得注意的是,即将到来的 C++0x 规范提供了支持具有非 pod 类型的初始化列表的方法。
-
你的类中可能有构造函数或私有字段
-
+ 1 @aaa:非常感谢。是的,我的数组(数据)在我的课堂上是私有的。