相关疑难解决方法(0)

如何在C++中初始化struct数组?

我的structC++代码中有以下内容(我使用的是Visual Studio 2010):

struct mydata
{
    string scientist;
    double value;
};
Run Code Online (Sandbox Code Playgroud)

我想这样做是为了能够初始化它们以快速的方式,类似于C99或类初始化数组初始化在C#中,东西一拉:

mydata data[] = { { scientist = "Archimedes", value = 2.12 }, 
                  { scientist = "Vitruvius", value = 4.49 } } ;
Run Code Online (Sandbox Code Playgroud)

如果在C++中对于结构数组不可能这样做,我可以为一个对象数组做吗?换句话说,数组的基础数据类型并不重要,重要的是我有一个数组,而不是一个列表,并且我可以用这种方式编写初始化器.

c++ arrays struct initialization

31
推荐指数
1
解决办法
7万
查看次数

如何用初始化列表构造std :: array对象?

可能重复:
如何使用initializer_list初始化成员数组?

您可以使用初始化列表构建一个std :: array:

std::array<int, 3> a = {1, 2, 3};  // works fine
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试从std::initializer_list作为类中的数据成员或基础对象构造它时,它不起作用:

#include <array>
#include <initializer_list>

template <typename T, std::size_t size, typename EnumT>
struct enum_addressable_array : public std::array<T, size>
{
    typedef std::array<T, size> base_t;
    typedef typename base_t::reference reference;
    typedef typename base_t::const_reference const_reference;
    typedef typename base_t::size_type size_type;

    enum_addressable_array(std::initializer_list<T> il) : base_t{il} {}

    reference operator[](EnumT n)
    {
        return base_t::operator[](static_cast<size_type>(n));
    }

    const_reference operator[](EnumT n) const
    {
        return base_t::operator[](static_cast<size_type>(n));
    }
};

enum class E {a, b, c};
enum_addressable_array<char, …
Run Code Online (Sandbox Code Playgroud)

c++ arrays initializer-list c++11

29
推荐指数
3
解决办法
2万
查看次数

C++ 11中的数组声明和初始化

以下是在C++ 11中声明和初始化数组的8种方法g++:

/*0*/ std::array<int, 3> arr0({1, 2, 3});
/*1*/ std::array<int, 3> arr1({{1, 2, 3}});
/*2*/ std::array<int, 3> arr2{1, 2, 3};
/*3*/ std::array<int, 3> arr3{{1, 2, 3}};
/*4*/ std::array<int, 3> arr4 = {1, 2, 3};
/*5*/ std::array<int, 3> arr5 = {{1, 2, 3}};
/*6*/ std::array<int, 3> arr6 = std::array<int, 3>({1, 2, 3});
/*7*/ std::array<int, 3> arr7 = std::array<int, 3>({{1, 2, 3}});
Run Code Online (Sandbox Code Playgroud)

根据严格标准(以及即将推出的C++ 14标准),正确的是什么?什么是最常见的/使用的和那些要避免的(以及为什么)?

c++ initialization c++11 stdarray c++14

11
推荐指数
1
解决办法
5394
查看次数