2013-01-23 16 views
15

हम कुछ इस तरह कर सकते हैं:sizeof (* इस) वर्ग परिभाषा

आईएसओ/आईईसी 9899: 2011

#include <iostream> 

class Foo 
{ 
public: 
    Foo() { std::cout << sizeof(*this) << '\n'; } 
}; 

सी स्टैंडर्ड में मैं निम्न देखें

6.7.2.1 संरचना और संघ विनिर्देश

8 ... प्रकार के तुरंत बाद अधूरा अधूरा है} सूची समाप्त करता है, और उसके बाद पूरा करता है।

लेकिन सी ++ मानक में मुझे कोई एनालॉग नहीं मिल रहा है।

आकार का ऑपरेटर अपूर्ण प्रकार के एक अभिव्यक्ति पर लागू नहीं किया जाएगा, तो क्या हम इस तरह के कोड लिख सकते हैं या नहीं?

+4

9.2p2 फिलर फिलर –

+0

+1 पोस्ट करने से पहले विनिर्देशन के शोध के लिए +1। –

उत्तर

10

हां, आप इस तरह के कोड लिख सकते हैं क्योंकि संकलक को इसका इलाज करना पड़ता है जैसे क्लास परिभाषा कक्षा विधि कार्यान्वयन के अंदर पूरी हो जाती है।

#include <iostream> 

class Foo 
{ 
public: 
    Foo(); 
}; 

// Methods declared in the body of a class are implicitly inline 
// Inline, however, probably doesn't mean what you think it means: 
inline Foo::Foo() { std::cout << sizeof(*this) << '\n'; } 
+0

क्या हम इस तरह कुछ लिख सकते हैं? http://liveworkspace.org/code/hN4ty$0 – FrozenHeart

+0

नहीं, इसकी अनुमति नहीं है। "शीर्ष स्तर पर 'इस' का अवैध उपयोग" error.it किसी भी सदस्य फ़ंक्शन के अंदर नहीं है। '' 'अस्तित्व में आती है जब वर्ग तत्काल होता है । लेकिन इस कोड में हम इसका अस्तित्व से पहले इसका उपयोग कर रहे हैं। – Arpit

+0

@Arpit: liveworkspace.org उदाहरण में प्रारंभिकता को C.2+ 11 द्वारा 9.2/2 की अनुमति है: "कक्षा सदस्य-विशिष्टता के भीतर, कक्षा को फ़ंक्शन निकायों, डिफ़ॉल्ट तर्क, अपवाद-विशिष्टताओं के भीतर पूर्ण माना जाता है, और ** गैर-स्थैतिक डेटा सदस्यों के लिए ** ब्रेस-या-बराबर-प्रारंभकर्ता ** "(जोर जोड़ा गया)। –

8

सदस्य समारोह शरीर के अंदर, वर्ग और कुछ complete- है, तो आप किसी अन्य सदस्य कार्यों उपयोग नहीं कर सका, न ही कोई सदस्य चर का उपयोग:

उदाहरण के लिए यह यह इलाज के लिए जैसे कि आप ने लिखा है , जो एक काफी बेकार सदस्य बना देगा।

+0

में जोड़ा गया क्या हम इस तरह कुछ लिख सकते हैं? liveworkspace.org/code/hN4ty$0 – FrozenHeart

+0

@ निकिता ट्रोपिमोव नो, लेकिन यह काम करता है: [लिंक] (http://liveworkspace.org/code/pPdNc$0) –

1

हाँ आप लिख सकते हैं और परिणाम भी सही होगा।

#include<iostream> 
using namespace std; 
class Foo 
{ 
public: 
     int x; 
    Foo() { std::cout << sizeof(*this) << '\n'; } 
}; 
int main(){ 
    Foo b; 
    b.x=5; 
    system("pause"); 
    return 0; 
    } 
संबंधित मुद्दे