2
逗號(,
)是否是序列號std::initializer_list
?std :: initializer_list和元素的求值順序
例如:是本UB與否:
#include <vector>
int main()
{
auto nums = []
{
static unsigned x = 2;
return (x++ % 2) + 1;
};
std::vector<int> v{ nums(), nums(), nums(), nums(), nums() };
// not sure if this is different: (note the additional brackets)
// std::vector<int> v({ nums(), nums(), nums(), nums(), nums() });
for(auto i : v)
{
std::cout << i;
}
return 0;
}
C++ 11中不再有「序列點」。然而,評估的順序是有保證的,而且確實是有序的,但我會在回答之前先搜索一個重複的。 – dyp
@DyP - 謝謝。我沒有發現重複,雖然我很確定我看到過類似的問題。我幾乎可以肯定,訂單是有保證的,但不是100%。 –
[dcl.init.list]/4「也就是說,每個值計算和與給定的*初始化子句*相關的副作用在每個值計算之前被排序,並且與任何*初始化子句*它在* initializer-list *的逗號分隔列表中。「 – dyp