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

标签 c++ c++11 initializer-list

this question 的答案暗示在循环中或使用“未知数据”使用初始化列表是行不通的。他们没有说明为什么会失败,也没有说明失败的原因。

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 个或更多元素的最大值。 似乎一切正常,但我不确定它们是否有效。

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

我使用了一组非常重的警告,从来没有报告过“警告:可能错误地使用了初始化列表”等等。

最佳答案

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, ...

回复只是省略了“数字”部分,因为它是对先前评论的直接回复。

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

关于c++ - 在循环中使用初始化列表是否有效?如果没有,它是如何失败的,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58885496/

相关文章:

c++ - 推导指南、initializer_list 和类型推导过程

c++ - 来自大括号初始化列表的短 C++ 类构造函数

c++ - 有什么办法可以将设置/数组设置为方法参数吗?

c++ - 转换 QString/QChar 以被 Crypto++ 接受

c++ - 递归模板参数删除

windows - 您需要安装什么才能在 Windows 上使用 Clang 为 64 位构建 c++14?

C++比较器复杂情况传参问题

c++ - 将 Variadic 模板包转换为 std::initializer_list

c++ - const 常量操作是否在运行时评估?

c++ - 如何修复基于 cpp 的具有 2 种不同大小的 C++ 结构?