पर नहीं है, तो मुझे restrict
की सामान्य समझ है लेकिन मैं कुछ अच्छे बिंदुओं को स्पष्ट करने की उम्मीद कर रहा हूं। मेरे पास एक ऐसा फ़ंक्शन है जो एक बफर से एक नल-टर्मिनेटेड स्ट्रिंग पढ़ता है और एक अन्य बफर में एक यूआरएल एन्कोडेड संस्करण लिखता है। समारोह इस हस्ताक्षर (वर्तमान में restrict
के बिना) है:जब उपयोग करना है और
char const *StringUrlEncode(char const *unencoded,
char *encoded,
char *encodedEnd);
unencoded
मेरी अशक्त-समाप्त स्रोत स्ट्रिंग है। गंतव्य बफर करने के लिए लेकिन सहित नहीं स्थान बताया encoded
और encodedEnd
, जहां बफर में पहली char
को encoded
अंक और पहले चार को encodedEnd
अंक के बाद बफर, समारोह यानी char
रों लिखेंगे का प्रतिनिधित्व करती है encodedEnd
तक - यह आपकी मूल begin
/end
इटरेटर जोड़ी है यदि आप सी ++ एसटीएल सम्मेलनों से परिचित हैं।
यदि मैं यह कार्य करने के लिए restrict
जोड़ने के लिए, यह केवल पहले दो मापदंडों के लिए लागू किया जाना चाहिए:
char const *StringUrlEncode(char const *restrict unencoded,
char *restrict encoded,
char *encodedEnd);
या वहाँ कुछ लाभ मैं सभी तीन पैरामीटर में जोड़कर समझने नहीं कर रहा हूँ है?
मैं देख सकता हूं कि इनपुट और आउटपुट बफर बनाने restrict
संकलक को यह जानने में मदद करता है कि वे ओवरलैप नहीं करते हैं। लेकिन अंतिम पैरामीटर के बाद से, encodedEnd
, केवल आउटपुट बफर के अंत को चिह्नित करने के लिए प्रयोग किया जाता है, मुझे लगता है कि restrict
वास्तव में यहां कंपाइलर के लिए कोई मदद नहीं होगी (हालांकि मुझे लगता है कि यह जोड़ना नहीं होगा समारोह घोषणा के लिए अनावश्यक शोर)।
मैंने माइक के लेख को पढ़ा है (अब दो बार) और यह एक अच्छी शुरुआत है, लेकिन मुझे कुछ प्रश्नों के साथ छोड़ दिया :-) –
दिया गया लिंक गैर-कार्यात्मक है। Google सुझाव देता है कि http://cellperformance.beyond3d.com/articles/2006/05/demystifying-the-restrict-keyword.html (2009-09-06 मान्य) पर एक अद्यतन संस्करण है लेकिन यह भी समस्याएं दे रहा है। कैश संस्करण Google पर उपलब्ध है। –