C++ sizeof operator before and after extending -
अब मैं C ++ sizeof ऑपरेटर के परिणाम का परीक्षण कर रहा हूं:
< कोड> वर्ग एस {}; वर्ग ए: सार्वजनिक एस {आभासी शून्य मज़ा () = 0; }; वर्ग बी {}; वर्ग सी: सार्वजनिक बी, सार्वजनिक ए {}; int main () {cout & lt; sizeof (ए) & lt; & lt; endl; // परिणाम 4 cout है & lt; sizeof (सी) & lt; & lt; endl; // परिणाम 8} लेकिन अगर मैं वर्ग के विस्तार को हटाता हूं:
class A {virtual void fun () = 0; }; वर्ग बी {}; वर्ग सी: सार्वजनिक बी, सार्वजनिक ए {}; int main () {cout & lt; sizeof (ए) & lt; & lt; endl; // परिणाम 4 cout है & lt; sizeof (सी) & lt; & lt; endl; // परिणाम 4} क्या कोई भी उन दोनों उदाहरणों में sizeof (C) के आउटपुट के अलग-अलग व्याख्या कर सकता है? क्लास एस सिर्फ एक खाली वर्ग है (मुझे पता है, sizeof (S) == 1 ), तो यह क्यों एक फर्क पड़ता है या नहीं A एक आधार वर्ग है? खासकर जब से यह sizeof (A) , sizeof (सी)
ऐसा लगता है कि वीएस एक स्थिति से ठीक से संभाल नहीं सकता है जब एक से अधिक खाली बेस कक्षाएं हैं। आपके पहले उदाहरण में एक खाली आधार वर्ग है, और दूसरे में दो हैं। उदाहरण के लिए मेरे बॉक्स पर इस कोड को वीएस2013 पर संकलित किया गया है:
#include & lt; iostream & gt; वर्ग बी 1 {}; वर्ग B2 {}; वर्ग B3 {}; वर्ग B4 {}; वर्ग B5 {}; वर्ग बी 6 {}; वर्ग सी 1: बी 1 {}; वर्ग सी 2: बी 1, बी 2 {}; वर्ग सी 3: बी 1, बी 2, बी 3 {}; वर्ग सी 4: बी 1, बी 2, बी 3, बी 4 {}; वर्ग सी 5: बी 1, बी 2, बी 3, बी 4, बी 5 {}; वर्ग सी 6: बी 1, बी 2, बी 3, बी 4, बी 5, बी 6 {}; Int main () {std :: cout & lt; & lt; आकारफ (सी 1) & lt; & lt; '' & Lt; & lt; आकारफ (सी 2) & lt; & lt; '' & Lt; & lt; आकारफ (सी 3) & lt; & lt; '' & Lt; & lt; आकारफ (सी 4) & lt; & lt; '' & Lt; & lt; आकारफ (सी 5) & lt; & lt; '' & Lt; & lt; आकारफ (सी 6) & lt; & lt; std :: endl; } आउटपुट
1 1 2 3 4 5 जबकि।
लेकिन यह व्यवहार अभी भी मानक संगत है, क्योंकि मानक खाली बेस कक्षाओं को दूर करने के लिए कार्यान्वयन को उपकृत नहीं करता।
Comments
Post a Comment