2016-10-24 6 views
5

मानक के अनुसार, std::vector<bool> कोई सदस्य फ़ंक्शन data() नहीं है। हालांकि, यह स्निपेट libstdc साथ ++ नवीनतम जीसीसी के साथ ठीक संकलित:libstdC++ के std :: vector <bool> :: डेटा क्या करता है?

#include <vector> 

int main() { 
    std::vector<bool> v; 
    v.data(); 
} 

हम परिणाम उपयोग करने का प्रयास करते हैं, तो यह पता चला है वापसी प्रकार void है।

क्या यह कुछ जीसीसी एक्सटेंशन या बग है?
यदि पूर्व सत्य है, तो यह क्या करता है?

+2

मैं डुप्ली से असहमत हूं। मुझे पता है कि मानक प्रश्न में कार्य को परिभाषित नहीं करता है, मैं एक विशिष्ट कार्यान्वयन के व्यवहार के बारे में पूछ रहा हूं। –

+2

क्या आपने सोर्स कोड पढ़ा था? जीसीसी ओपन सोर्स है। –

+0

@ लाइटनेसरेसेसिन ऑर्बिट मैं स्वीकार करता हूं कि मैंने नहीं किया। ऐसा लगता है कि इससे मदद मिलेगी। :) –

उत्तर

10

मेरे /usr/include/c++/4.8/bits/stl_bvector.h है: std::vector<bool> की डिबग संस्करण संकलन नहीं होगा जब तक कि std::vector<bool>::data अस्तित्व में:

using _Base::data; 

तो उस कारण हो रहा है:

// _GLIBCXX_RESOLVE_LIB_DEFECTS 
// DR 464. Suggestion for new member functions in standard containers. 
// N.B. DR 464 says nothing about vector<bool> but we need something 
// here due to the way we are implementing DR 464 in the debug-mode 
// vector class. 
void 
data() _GLIBCXX_NOEXCEPT { } 

/usr/include/c++/4.8/debug/vector में मैं घोषणा देखें।

+0

[निर्दिष्ट डीआर से लिंक] (https://gcc.gnu.org/onlinedocs/libstdc++/ext/lwg-defects.html#464)। –

+1

दुखद। यह उपयोगी होगा अगर यह पैक किए गए बफर को पॉइंटर लौटाता है। इसे 'निजी' क्यों न बनाएं? – Yakk

संबंधित मुद्दे