在循环中使用初始化列表是否有效?如果没有,它是如何失败的,为什么?

Does using an initializer list in a loop work? If not, how does it fail and why?

this question 的答案暗示在循环中或与 "unknown data" 一起使用初始化列表是行不通的。他们没有说明为什么会失败,也没有说明失败的原因。

IE,这样做:(这是一个无意义的操作,但表明列表的内容会随着循环的进行而改变)

std::vector<float> vec;
// Assume vec is filled with some useful data

for(int i = 0; i < 10; i++) 
{ 
  for(int j = 0; j < 10; j++) 
  {
    for(int k = 0; k < 10; k++) 
    {
      result = std::max({vec[i], vec[j], vec[k]});
      // do something with result...
    }
  }
}

我的代码使用初始化列表来非常频繁地获取 3 个或更多元素的最大值。 似乎 一切正常,但我不确定它们是否有效。

我想了解它是否有效。如果没有,它是如何失败的以及为什么。

我使用了一组非常重的警告,没有任何报道 "warning: may be using initializer list incorrectly" 等等。

The answers to this question imply that using an initializer list in a loop or with "unknown data" wouldn't work.

由于省略了一个词,这是对所说内容的误解。 The statement you're talking about 是对这条评论的回应:

How would you make this work if the data is generated in a loop, or the number of data changes at runtime?

添加了重点。所以当这个人说:

If the data changes at runtime, ...

回复只是省略了 "number" 部分,因为它是对先前评论的直接回复。

Braced-init-lists 可以包含任意数量的项目,但列表中的项目数量必须在编译时定义。