मैं वर्तमान में constexpr
कन्स्ट्रक्टर के साथ एक कक्षा बना रहा हूं और मुझे आश्चर्य है कि क्या मैं इस कक्षा के डेटा को संग्रहीत करने के लिए std::array
का उपयोग कर सकता हूं। क्या मानक स्पष्ट रूप से निर्दिष्ट करता है कि std::array
में constexpr
कन्स्ट्रक्टर है और इसकी सामग्री को संकलित समय पर एक्सेस किया जा सकता है?क्या std :: सरणी को constexpr क्लास में उपयोग किया जा सकता है?
उत्तर
क्योंकि std::array<T, N>
एक समग्र है, यह एक constexpr
के रूप में प्रारंभ किया जा सकता है यदि और केवल यदि अंतर्निहित प्रकार T
एक constexpr
निर्माता है (जब प्रत्येक प्रारंभकर्ता उपलब्ध कराने के साथ प्रस्तुत)।
@MarkGlisse द्वारा टिप्पणी के आधार पर: इस compiles
#include <array>
#include <iostream>
template<typename T, std::size_t N>
struct X
{
constexpr X(const std::array<T,N>& a):arr(a){}
private:
std::array<T,N> arr;
};
constexpr std::array<int,2> a {{ 13, 18 }};
constexpr X<int,2> x = a;
int main()
{
}
मेरा मानना है कि मैं स्टैंडर्ड यहां से प्रासंगिक उद्धरण पाया है:
12,1 कंस्ट्रक्टर्स [class.ctor]
6 डिफॉल्ट कन्स्ट्रक्टर जिसे डिफॉल्ट किया गया है और हटाए गए अनुसार नहीं किया गया है यह ओडी होने पर निहित रूप से def ned है वर्ग प्रकार (1.8) का ऑब्जेक्ट बनाने के लिए या जब इसे स्पष्ट रूप से घोषणा के बाद स्पष्ट रूप से डिफॉल्ट किया गया है, तो इसका उपयोग किया गया। निहित रूप से डिफॉल्ट डिफॉल्ट कन्स्ट्रक्टर कक्षा के प्रारंभिक सेटों का सेट करता है जो द्वारा उस श्रेणी के उपयोगकर्ता द्वारा लिखित डिफ़ॉल्ट कन्स्ट्रक्टर द्वारा सीटीओआर-प्रारंभकर्ता (12.6.2) और एक खाली यौगिक-कथन के साथ किया जाएगा। यदि वह उपयोगकर्ता-लिखित डिफ़ॉल्ट कन्स्ट्रक्टर बीमार हो जाएगा, तो प्रोग्राम खराब गठित है। यदि वह उपयोगकर्ता-लिखित डिफ़ॉल्ट कन्स्ट्रक्टर कॉन्स्टेक्सर कन्स्ट्रक्टर (7.1.5) की आवश्यकताओं को पूरा करेगा, तो निश्चित रूप से डिफाईड डिफ़ॉल्ट कन्स्ट्रक्टर constexpr है।
यह अनिवार्य रूप से @ बेनवोइग के उत्तर की तरह दिखता है।
'# शामिल
@MarcGlisse 'a' और' X' के सामने' constexpr' जोड़ने का प्रयास करें, और यह संकलित नहीं होगा! – TemplateRex
'# शामिल
- 1. पता() को constexpr फ़ंक्शन के रूप में कार्यान्वित किया जा सकता है?
- 2. क्या श्रेणी विधियों को ओवरराइड किया जा सकता है? आईओएस
- 3. क्या std :: forward_list सदस्यों को स्थैतिक के रूप में कार्यान्वित किया जा सकता है?
- 4. क्या WampServer उत्पादन में सफलतापूर्वक उपयोग किया जा सकता है?
- 5. Cpython में क्या किया जा सकता है जो IronPython में नहीं किया जा सकता है?
- 6. स्ट्रिंग फ़ील्ड नाम का उपयोग करके सरणी में शामिल नहीं किया जा सकता है [$] सरणी फ़ील्ड
- 7. क्या इटरेटर को पायथन में रीसेट किया जा सकता है?
- 8. सरणी कि [ 'नाम'] सी # में का उपयोग कर सरणी accesed किया जा सकता है
- 9. क्या std :: async टेम्पलेट फ़ंक्शंस के साथ उपयोग किया जा सकता है
- 10. एक स्ट्रिंग अक्षर को लगातार अभिव्यक्ति में सब्सक्राइब किया जा सकता है?
- 11. क्या मोंगोडीबी को प्रक्रिया में होस्ट किया जा सकता है?
- 12. बढ़ा सकते हैं :: std कंटेनरों में smart_ptr का उपयोग किया जा सकता है?
- 13. तत्काल क्या किया जा सकता है?
- 14. क्या std :: सरणी में स्मृति है?
- 15. क्या बेस क्लास का प्रकार टेम्पलेट प्रकार से स्वचालित रूप से प्राप्त किया जा सकता है?
- 16. एसवीजी फाइलें, क्या उनका उपयोग किया जा सकता है?
- 17. क्या MySQLBulkLoader लेनदेन के साथ उपयोग किया जा सकता है?
- 18. क्या Log4JLogger का मूल कारण पाया जा सकता है या उपयोग नहीं किया जा सकता है?
- 19. क्या java.lang.String.concat में सुधार किया जा सकता है?
- 20. क्या पीडीएफ को वेक्टर छवि प्रारूप में परिवर्तित किया जा सकता है जिसे .NET से मुद्रित किया जा सकता है?
- 21. तो क्या stl संग्रह में unique_ptr सुरक्षित रूप से उपयोग किया जा सकता है?
- 22. std :: vector को सरणी
- 23. आकार() का उपयोग सरणी लंबाई को परिभाषित करने के लिए किया जा सकता है?
- 24. एक्सएएमएल में प्रतिशत मूल्यों का उपयोग किया जा सकता है?
- 25. क्यों बढ़ावा :: प्रारूप को सीधे std :: string में परिवर्तित नहीं किया जा सकता है?
- 26. उत्पादन कोड में स्टॉपवॉच का उपयोग किया जा सकता है?
- 27. गेटर्स बराबर और हैशकोड में उपयोग किया जा सकता है?
- 28. पाइथन डेल() अंतर्निर्मित में उपयोग नहीं किया जा सकता है?
- 29. क्या जेएफआरएएम को सामने लाया जा सकता है लेकिन ध्यान केंद्रित नहीं किया जा सकता है?
- 30. क्या पर्ल विधि कॉल को अवरुद्ध किया जा सकता है?
'std :: array' में मेरे सर्वोत्तम ज्ञान के लिए 'constexpr' कन्स्ट्रक्टर नहीं है –
' std :: array' में कोई (उपयोगकर्ता परिभाषित) कन्स्ट्रक्टर नहीं है। यह एक कुल है। – chris
ध्यान दें कि यद्यपि आप डेटा स्टोर कर सकते हैं, आपको एक कॉन्सएक्सप्रस तरीके से निकालने में कठिन समय लगेगा। –