2016-05-02 2 views
7

alignment_of` मैं सिर्फ std::alignment_of प्रकार विशेषता पर ठोकर खाई है, और अपने दोस्त std::alignment_of_v जल्द ही होने वाली है। ऐसा लगता है कि उन्हें विशेष रूप से alignof पर एक सादे कॉल के बराबर बनाया गया है, और _v सहायक का भविष्य जोड़ा इंगित करता है कि यह केवल एक विरासत बिट नहीं है।`std ::` बनाम alignof`

std::alignment_of (_v) का उपयोग क्या है, जब हमारे पास alignof है?

+0

उपयोग के बजाय अभिव्यक्ति के साथ उपयोग करते समय सही त्रुटि होने के लिए * gnu-alignof-expression * :-)। – Jarod42

उत्तर

6

वे लगभग पूरी तरह से अनावश्यक हैं। जैसा कि @Revolver ने नोट किया, उन्हें विभिन्न कागजात में पेश किया गया था, और alignment_ofboost लगभग क्रियापद से आता है।

लेकिन इसका मतलब यह नहीं है कि विशेषता बेकार है।

template<class...>class अन्य template एस को पारित किया जा सकता है और मेटाप्रोग्रामिंग के साथ उपयोग किया जा सकता है। alignof जैसे ऑपरेटर नहीं कर सकते: आपको template<class>class alignment_of लिखना होगा इससे पहले कि आप मेटाप्रोग्रामिंग सुविधाओं तक पहुंच सकें।

अब एक ही एक std::size_of<class> टेम्पलेट की आवश्यकता होगी, sizeof के बारे में कहा जा सकता है।

...

_v में शामिल किया है क्योंकि वे std में हर::valueintegral_constant प्रकार टेम्पलेट बह और एक _v चर टेम्पलेट गयी। यह ध्यान में रखते हुए कि कौन सा योग्य है और जो पिक्चरिंग और लगभग व्यर्थ नहीं होगा: योग्य लोगों को करने के प्रयासों को खर्च करने के बजाय हर किसी को करना आसान है। यह किया जा रहा है सबूत नहीं है कि सुविधा अप्रचलित नहीं है।

+0

मेटाफंक्शन की उपयोगिता ने मेरे दिमाग को पार नहीं किया था। यह एक बहुत अच्छा मुद्दा है, धन्यवाद! – Quentin

4

std::alignment_of बूस्ट प्रकार लक्षण पुस्तकालय के बंदरगाह के रूप में शुरू की है। यह सी ++ 11 और alignof कीवर्ड की भविष्यवाणी करता है। यही कारण है कि विशेषता alignof ऑपरेटर द्वारा हाथों में ले लिया है, लेकिन यह (ताकि आप सिर्फ std:: साथ boost:: की जगह सकता है) मुख्य रूप से संगतता उद्देश्यों के लिए रखा गया था और _v चर उर्फ ​​पुस्तकालय के अन्य भागों के साथ स्थिरता के लिए शुरू की है।

+0

आपके उत्तर से ऐसा लगता है कि उन्हें अलग से पेश किया गया था, जब वे नहीं थे (सी ++ 11 के बाद से दोनों)। – edmz

+0

@black तकनीकी रूप से उन्हें अलग से पेश किया गया था (विभिन्न कागजात में)। मेरे उत्तर का मुद्दा यह था कि यह मानक में शामिल होने से पहले प्री-सी ++ 11 लाइब्रेरी का हिस्सा था। –

+0

'alignment_of' TR1 में था। –

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