2012-03-06 17 views
9

मैं g ++ 4.6.2 (mingw) पर g++ -std=c++0x pod_test.cpp के साथ नीचे चला गया। मुझे ए 4 पर एक त्रुटि मिलती है। ए 4 पीओडी क्यों नहीं है?यह एक पीओडी प्रकार क्यों नहीं है?

#include <iostream> 
#include <new> 
#include <cstring> 

using namespace std; 

struct A { 
    int a, b; 
    char c; 
}; 
struct A2 { 
    short buf[1]; 
}; 
struct A3:A { 
}; 
struct A4:A { 
    short buf[1]; 
}; 
static_assert(std::is_pod<A>::value, "Struct must be a POD type"); 
static_assert(std::is_pod<A2>::value, "Struct must be a POD type"); 
static_assert(std::is_pod<A3>::value, "Struct must be a POD type"); 
static_assert(std::is_pod<A4>::value, "Struct must be a POD type"); 

int main(){} 

उत्तर

16

यह पॉड नहीं है, क्योंकि यह मानक लेआउट कक्षाओं के लिए इस नियम को तोड़ता:

- या तो सबसे व्युत्पन्न वर्ग में कोई गैर स्थिर डेटा सदस्यों और गैर के साथ सबसे अधिक एक आधार वर्ग में है स्थिर डेटा सदस्यों, या कोई आधार गैर स्थिर डेटा सदस्यों

विरासत जाली गैर स्थिर डेटा सदस्यों हो सकता है में केवल एक वर्ग के साथ वर्गों है। इस मामले में, A और A4 दोनों हैं।

+0

गैर स्थैतिक डेटा सदस्यों के साथ सबसे अधिक बेस क्लास में है। सभी उदाहरणों में। यह नियम कैसे लागू होता है? – Mordachai

+1

"गैर-स्थैतिक डेटा सदस्यों के साथ अधिकांश एक बेस क्लास में सबसे व्युत्पन्न कक्षा ** और ** में कोई गैर-स्थैतिक डेटा सदस्य नहीं हैं"। 'ए 4 'में गैर स्थैतिक डेटा सदस्य हैं। –

+0

मुझे लगता है कि मैंने आपको उससे जोड़ा है। मुझे इसकी संप्रदाय 7 -lookups- ठीक 9.0.7 याद है। स्वीकार करें जब मैं कर सकता हूँ। मैंने पहले या 'पहले' को नजरअंदाज कर दिया था। कोई आश्चर्य नहीं कि 'या तो' कोई समझ नहीं आया। –

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