2015-06-16 9 views
6

आज मैं इस तरह कुछ कोड देखा:'कॉन्स decltype ((ए))' एक कॉन्स संदर्भ घोषित नहीं करता है?

int a = 0; 
const decltype((a)) x = 10; // Error 

const int b = 0; 
decltype ((b)) y = 42; // Correct 

मैं देख सकता हूँ क्यों सही कोड सही है, लेकिन मैं नहीं देख सकते हैं क्यों गलत कोड गलत है।

मैंने इसका परीक्षण किया, और बस इसे थोड़ा डरावना पाया।

const decltype((a)) x = 10; यह const int& सही परिभाषित करना चाहिए? लेकिन यह संकलन नहीं करता है! error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'int'

मैंने इसे const decltype((a)) x = a; में बदल दिया, फिर यह संकलित करता है।

खैर, x एक कॉन्स संदर्भ है? नहीं, मैंने पाया कि यह एक गैर-कॉन्स्ट संदर्भ है। मैं के माध्यम से a के मान को संशोधित कर सकता हूं।

const संशोधक क्यों प्रभावी नहीं हुआ? क्योंकि const पूर्ण प्रकार है जो int& है पर लागू होता है और int& को const को जोड़ने से यह int& const जो int करने के लिए स्थिरांक संदर्भ है

+4

'कॉन्स्ट' संदर्भ के संदर्भ में संदर्भ (और अनदेखा) पर लागू होता है। –

+3

संशोधक के साथ 'decltype' संयोजन को ठीक तरह से 'टाइपेडफ'-एड प्रकार में संशोधक संशोधक की तरह काम करता है। यह टेक्स्ट प्रतिस्थापन नहीं है। –

+0

@ टी.सी. @ बेन-वॉयग ओह, मुझे मिल गया। इसलिए 'int' के पूरे शरीर पर 'const' को 'int' के संदर्भ में लागू किया गया है, न केवल इसे 'const int' के रूप में जोड़ा गया है, कॉन्स्ट int के संदर्भ में ... सही है? – CyberLuc

उत्तर

8

गलत हिस्सा गलत है। लेकिन संदर्भ const अपनी प्रकृति से है इसलिए कॉन्स्ट भाग को केवल अनदेखा किया जाता है। इसलिए परिणामी प्रकार अभी भी int&

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