C++ std::vector, 静态初始化

C++ std::vector, static initialisation

我正在开发一个包含成员变量的项目,在 class 定义中:

    static std::vector < std::vector < std::vector < UINT16 > > >  m_vectors;

这看起来像一个 3 维无符号 16 位整数数组。

目前对此的初始化是通过创建多个 UINT16 数组然后 t运行 使用 memcpy 将它们转移到 m_vectors 来完成的。

我正在寻找一种在 cpp 文件中执行此初始化的方法,例如:

    std::vector < std::vector < std::vector < UINT16 > > > cname::m_vectors = 
    {1,2,3},{4,5,6},{7,8,9},{10,11,12};

数据仅供参考,这可能吗?

编辑:使用 Qt 我尝试了以下操作:

    std::vector < std::vector < std::vector < int > > > test{{{1,2,3,4,5},{6,7,8,9,10}}};

调试器中的构建和 运行 完美运行,我会将此测试通过电子邮件发送给自己,明天在开发系统上进行测试,我在开发系统上使用 MSVC 2010。

Edit.2 我刚刚在我的开发系统上尝试了相同的逻辑,这是 运行 Windows 7 [6.1.7601] 和 Microsoft Visual Studio [10.0.40219.1 SP1Rel] 与 Microsoft Visual C++ 2010 [01018-532-2002181-70881]

在我的 class header 我有:

    static std::vector < std::vector < std::vector < UINT16 > > > m_vectors;

在我的 cpp 文件中有:

    std::vector < std::vector < std::vector < UINT16 > > > cname:m_vectors{{{
    0x01,0x02,0x03}}};

数据只是一个例子,格式是一样的。当我编译时,我得到:

    error C2470: 'cname:m_vectors' : looks like a function definition,  but there is no parameter list; skipping apparent body

与我的 MacBook Pro 运行 iOS 和 Qt 5.11 上的第一个编辑几乎相同的相同逻辑编译和工作。

我现在认为这更多是 MSVC 2010 的问题,而不是语法。

当然,这是可能的。

static std::vector<std::vector<std::vector<UINT16>>> m_vectors{
                  {
                    {1, 2, 3}, {1, 3, 3}
                  },
                  {
                    {3, 5, 6}, {3, 5, 6}
                  }
};

这是使用 std::vector 的列表初始化 - 在 https://en.cppreference.com/w/cpp/container/vector/vector 中查看更多信息(重载 8)