在循环中使用初始化列表是否有效?如果没有,它是如何失败的,为什么?
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 可以包含任意数量的项目,但列表中的项目数量必须在编译时定义。
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 可以包含任意数量的项目,但列表中的项目数量必须在编译时定义。