मैं जीसीसी 4.7.2 का उपयोग कर रहा और SUSE एंटरप्राइज लिनक्स पर 1.58.0 बढ़ावा 11. मैं निम्नलिखित कोड का टुकड़ा जो मूल रूप से बहुभुज की एक सूची के माध्यम से चला जाता है की गणना करने के उनके लंबाई चौड़ाई। मैं std :: minmax फ़ंक्शन के साथ 'ऑटो' कीवर्ड का उपयोग करते समय अजीब आउटपुट देख रहा हूं। तुलना करने के लिए, मैं एक दूसरा चर घोषित करता हूं जहां प्रकार स्पष्ट रूप से घोषित किए जाते हैं (यानी, मंद बनाम dim1)।'ऑटो' और साथ अजीब व्यवहार अवलोकन std :: minmax
namespace gtl = boost::polygon;
typedef gtl::polygon_90_data<int> LayoutPolygon;
typedef gtl::rectangle_data<int> LayoutRectangle;
static LayoutFeatureVec
calc_stats(LayoutPolygonSet const& lp)
{
LayoutFeatureVec v;
LayoutFeature f;
LayoutRectangle y;
for (LayoutPolygon const& p : lp) {
// Compute bounds.
gtl::extents(y, p);
// Get width/length (shorter/longer).
// FIXME: Why does this not work with auto??
cout << gtl::delta(y, gtl::HORIZONTAL) << " " << gtl::delta(y, gtl::VERTICAL) << endl;
auto dim = std::minmax(gtl::delta(y, gtl::HORIZONTAL),
gtl::delta(y, gtl::VERTICAL));
std::pair<int, int> dim1 = std::minmax(gtl::delta(y, gtl::HORIZONTAL),
gtl::delta(y, gtl::VERTICAL));
cout << dim.first << " " << dim.second << endl;
cout << dim1.first << " " << dim1.second << endl;
<snip>
v.push_back(f);
}
return v;
}
इस लूप के पहले पुनरावृत्ति के लिए, अपेक्षित आउटपुट यह सही है।
380 420
380 420
380 420
हालांकि, अगर मैं 'dim1' बाहर टिप्पणी और एक ही कोड को फिर से चलाएं (अर्थात, बस ऑटो मंद है), मैं std :: minmax साथ अजीब परिणाम प्राप्त।
380 420
140737295994126 140737295994126
मैं यहां क्या गलत कर रहा हूं?
यहाँ कम से कम उदाहरण (उत्तर पर नीचे आधारित संपादित) है।
#include <iostream>
#include <algorithm>
#include <boost/polygon/polygon.hpp>
using namespace std;
namespace gtl = boost::polygon;
using namespace gtl::operators;
int main(int argc, char** argv)
{
gtl::rectangle_data<int> x(0,0,5,5);
auto dim = std::minmax(gtl::delta(x, gtl::HORIZONTAL), gtl::delta(x, gtl::VERTICAL));
cout << dim.first << " " << dim.second << endl;
return 0;
}