जब मैं एक सरणी चर को किसी अन्य सरणी चर में निर्दिष्ट करता हूं तो कितनी जानकारी कॉपी/साझा की जाती है?सरणी चर साझा करने वाली कितनी जानकारी साझा करते हैं?
int[] a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
int[] b = a;
a[0] = 42;
writefln("%s %s", a[0], b[0]); // 42 42
जाहिर है, a
और b
, एक ही पेलोड का हिस्सा है क्योंकि 42 में दो बार छपा है।
a ~= 10;
writefln("%s %s", a.length, b.length); // 11 10
a
को जोड़ b
परिवर्तन नहीं होता है, तो लंबाई पेलोड का हिस्सा प्रतीत नहीं होता है?
b = a;
a ~= 11;
b ~= 42;
writefln("%s %s", a[11], b[11]); // 11 42
क्या एक अनुरूप डी कार्यान्वयन भी 42 42
प्रिंट कर सकता है? b ~= 42
a
के अंदर 11 को ओवरराइट कर सकता है?
जब a
और b
एक दूसरे से अलग हो गए हैं? क्या डी पृष्ठभूमि में कुछ गाय कर रहा है?
में रखा जाता है? मैं इस धारणा के तहत था कि '~ =' के आमंत्रण दोहराने से वर्गवार से बेहतर प्रदर्शन होगा ... – fredoverflow
@FredOverflow: हाँ, यह रैखिक है - यह संभवतः मूल सरणी में जोड़ता है, लेकिन चूंकि पुराना टुकड़ा केवल 'देखता है' मूल भाग (लंबाई की अपनी प्रति के माध्यम से), तो यह नहीं देखेगा कि आपने कुछ भी जोड़ा है। – Mehrdad
तो '~ =' केवल तब तक कुशल है जब तक कोई साझाकरण न हो? इसका मतलब है कि 'बी = ए' किसी भी तरह पृष्ठभूमि में 'ए' को संशोधित करता है, है ना? – fredoverflow