#include <iostream>
#include <algorithm>
#include <vector>
int main()
{
// Block 1
{
auto inc = []() { int i = 0; return [&]() { return i++; }; }();
std::vector<int> v(10, 10);
std::generate(v.begin(), v.end(), inc);
for (auto i : v) std::cout << i << std::endl;
}
// Block 2
{
auto inc = []() { int i = 0; return [&]() { return i++; }; };
std::vector<int> v(10, 10);
std::generate(v.begin(), v.end(), inc());
for (auto i : v) std::cout << i << std::endl;
}
}
मुझे यकीन नहीं है कि ये दो ब्लॉक अलग-अलग परिणाम क्यों उत्पन्न करते हैं।सी ++ लैम्ब्डा
Block 1: 32767 ... 32776
Block 2: 0 ... 10
और std::generate
जनरेटर (inc
) मूल्य से पारित हो जाता है, तो मेरा मानना है कि यह ठीक होना चाहिए अधिकार के लिए?
मैं ओएस एक्स चला रहा हूँ
धन्यवाद,
ध्यान दें कि कोड से परिणाम अपरिभाषित हैं, नीचे देखें।
पुन: पेश नहीं किया जा सकता है, जीसीसी v5.1.0 दोनों मामलों में एक ही आउटपुट उत्पन्न करता है – Slava
मैं क्लैंग संस्करण 3.6.2 के साथ संकलित कर रहा हूं। – Ling
कभी नहीं, यह यूबी है, इसलिए विशेष आउटपुट अप्रासंगिक है – Slava