मैं ओपनडीई के स्रोत के माध्यम से देख रहा था और मैं एक वर्ग पर सरणी अनुक्रमण ऑपरेटर '[]' के कुछ भयंकर सिंटैक्स उपयोग में आया था। यहाँ एक सरल उदाहरण वाक्य रचना दिखाने के लिए है:यह सी ++ वाक्यविन्यास क्या मतलब है और यह क्यों काम करता है?
#include <iostream>
class Point
{
public:
Point() : x(2.8), y(4.2), z(9.5) {}
operator const float *() const
{
return &x;
}
private:
float x, y, z;
};
int main()
{
Point p;
std::cout << "x: " << p[0] << '\n'
<< "y: " << p[1] << '\n'
<< "z: " << p[2];
}
आउटपुट:
x: 2.8
y: 4.2
z: 9.5
यहाँ क्या हो रहा है? यह वाक्यविन्यास क्यों काम करता है? प्वाइंट क्लास में कोई ओवरलोडेड operator []
नहीं है और यहां यह कोड कहीं भी फ़्लोट करने के लिए स्वचालित रूपांतरण करने का प्रयास कर रहा है।
मैंने कभी इस तरह के उपयोग को कभी नहीं देखा है - यह निश्चित रूप से कम से कम असामान्य और आश्चर्यजनक दिखता है।
धन्यवाद
ध्यान दें कि यह पता लगाने के लिए कि क्या यह 'ऑपरेटर []' या पॉइंटर रूपांतरण फ़ंक्शन का उपयोग कर रहा है, आप यह अजीब परीक्षण कर सकते हैं: यदि '0 [p]' काम करता है, तो यह एक सूचक रूपांतरण का उपयोग कर रहा है। अगर यह काम नहीं करेगा लेकिन यदि 'पी [0]' काम करता है, तो यह 'ऑपरेटर [] 'का उपयोग कर रहा है। –