使用lambda初始化静态数组

时间:2017-08-21 09:30:58

标签: c++ c++11

我有一个模板,其中有一个静态数组。我正在尝试使用lambda初始化数组 - 但我认为它没有初始化:

template <class base>
A<base> A<base>::arr[SIZE] = [] () 
{
  for (int i = 0 ; i < SIZE; i++)
  {
    A<base>::arr[i]=A<base>();
    std::cout<<"Test"<<std::endl;
  }
};

运行可执行文件时,我无法在控制台中看到我的cout消息。

如何使用lambda功能初始化数组?

1 个答案:

答案 0 :(得分:1)

你从未打电话给lambda。

lambda不会返回任何内容,因此无论如何使用其返回值进行初始化都无法正常工作。

无法返回数组。

除了默认初始化之外,数组只能使用括号括起的值列表(或字符串文字)进行初始化,而这些值不能从函数(包括lambdas)返回。

您的循环似乎值初始化所有元素。未在大括号初始化列表中列出的元素是值初始化的,因此您可以使用空括号括起来的列表来实现循环:

template <class base>
A<base> A<base>::arr[SIZE] = {};