gpt4 book ai didi

c++ - 我应该如何初始化 boost::array?

转载 作者:IT老高 更新时间:2023-10-28 22:34:11 32 4
gpt4 key购买 nike

我正在尝试理解 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 行中发生的一些特定于 boost 的事情吗?

最佳答案

这是一个常规的大括号初始化列表:

Boost 数组定义如下:

struct array { T elems[N]; };

内大括号用于元素数组初始化,外大括号用于结构初始化。如果您提供自己的构造函数,则不再有任何无法使用大括号初始化的普通旧数据类型

请注意,您可以不使用外括号,但会收到警告

关于c++ - 我应该如何初始化 boost::array?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2687701/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com