2012-12-22 10 views
52

मैं कोड here कि कुछ इस तरह देखा पाया:क्या में 'शून्य()' का क्या 'ऑटो च (पैरामीटर) -> decltype (..., शून्य())' होते हैं?

auto f(T& t, size_t n) -> decltype(t.reserve(n), void()) { .. } 

सभी दस्तावेज़ मैंने पढ़ा है मुझे बताया गया था कि decltype हस्ताक्षरित किया गया है के रूप में:

decltype(entity)

या

decltype(expression)

और कहीं भी कोई दूसरा तर्क नहीं है। कम से कम यह cppreference पर इंगित किया गया है। क्या यह decltype पर दूसरा तर्क है? और यदि हां, तो यह क्या करता है?

उत्तर

71

चूंकि यह एक अभिव्यक्ति है कि अल्पविराम अल्पविराम ऑपरेटर (प्रकार अर्थ है आरएचएस पक्ष के प्रकार: void) बस है, नहीं एक और तर्क।

वह कोड SFINAE का उपयोग कर रहा है - यह सक्षम है अगर t.reserve(n) मौजूद है लेकिन यह वापसी प्रकार को void के रूप में रखना चाहता है।

+0

मैंने कभी नहीं अनुमान लगाया गया होता। धन्यवाद। –

+5

@ टेम्पलेटबॉय: कॉमा ऑपरेटर हमेशा सबसे अप्रत्याशित स्थानों में उगता है;) –

+9

ओएमजी हमें ऐसी हैकी चाल लिखने के लिए भाषा संरचनाओं की गंभीरता से आवश्यकता नहीं है! O__O ;;; – Klaim

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