我正在尝试理解 boost数组。可以从作者的网站轻松阅读代码。
在设计理念中,作者(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)的实验中,第一行能够工作,但第二行不能。 (第二行的结果如下所示:
warning: missing braces around initializer for 'int [4]'
warning: missing initializer for member 'boost::array<int, 4ul>::elems'
不过,我的主要问题是,第一行代码是如何工作的?我尝试编写一个类似于array.hpp的类,并使用类似于第一行的语句,但是它没有起作用:-(。错误信息如下:
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行中是否发生了某些特定于boost的事情,我需要注意吗?