2016-08-30 8 views
10

n4487 और अन्य सी ++ 17 संदर्भों के अनुसार, नया लैम्ब्डा फ़ंक्शन विनिर्देशक होगा - constexpr, जो वर्तमान में "स्पष्ट रूप से निर्दिष्ट करता है कि फ़ंक्शन कॉल ऑपरेटर constexpr फ़ंक्शन है।"। मैं भेड़ के बच्चे में निरंतर अभिव्यक्तियों के बारे में प्रेरणा को समझता हूं।डिफ़ॉल्ट रूप से कॉन्सटेक्स लैम्ब्डा?

4) constexpr विनिर्देशक लैम्ब्डा-declarator भीतर शामिल न करने पर, समारोह कॉल ऑपरेटर (या टेम्पलेट) constexpr है अगर यह की आवश्यकताओं को संतुष्ट हैं: क्या मेरे लिए दिलचस्प है प्रस्ताव की बात 4 जिसमें कहा गया है एक constexpr समारोह।

यह मैं दो प्रश्न की ओर जाता है:

  1. हम constexpr विनिर्देशक आवश्यकता क्यों है? ऐसा लगता है कि लैम्ब्डा कॉल ऑपरेटर constexpr होगा या नहीं, केवल इस तथ्य पर निर्भर करता है कि यह "constexpr फ़ंक्शन की आवश्यकताओं को पूरा करेगा", लेकिन constexpr विशिष्ट उपस्थिति से नहीं।
  2. यदि यह डिफ़ॉल्ट रूप से constexpr लैम्ब्डा के लिए स्वीकार्य है, तो यह अन्य प्रकार के कार्यों के लिए भी क्यों प्रस्तावित नहीं है - उदाहरण के लिए वैश्विक कार्य? यदि संकलक constexpr के रूप में आवश्यकताओं को कवर करने वाले सभी कार्यों का इलाज शुरू करता है तो क्या प्रभाव होगा?

उत्तर

7
  1. constexpr क्वालीफायर यह लैम्ब्डा constexpr कार्यों की आवश्यकताओं का उल्लंघन करने के लिए एक संकलन त्रुटि बनाता है। जब आप स्पष्ट रूप से को लैम्ब्डा constexpr होने की आवश्यकता है, तो आप इसका उपयोग करते हैं, ताकि आप गलती से इसे constexpr न करें।

  2. Asked and answered.

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