yılında dereferencing ve Bence bu farkla ilgili bir şey var, ama bu işlem bana hiç mantıklı gelmiyor. Bunu yapmak için herhangi bir açıklaması var mı?, başvuruda bulunma ve ben kod</p> <pre><code>MachineInstr *MI = &*I; </code></pre> <p>Ben biraz c newb ++ ve referansları ve işaretçiler arasındaki fark bana oldukça belirsiz bu hat tökezledi LLVM kaynak koduna göz merak Aynı talimat
cevap
I
tipi, MachineInstr&
ürününü vermek üzere aşırı yüklü olan operator*()
yüklü bir tür yineleyici veya akıllı göstericidir. I
tarafından başvurulan nesneye yerleşik bir işaretçi almak istiyorsanız, *I
kullanarak nesneye bir başvuru alırsınız ve &*I
kullanarak bu başvurunun adresini alırsınız.
'Ben aslında bir yineleyici. Bu tamamen anlamlıdır :) –
Eğer ben sadece bir işaretçi isek, bu mantıklı değil. Büyük ihtimalle akıllı bir işaretçi (bir işaretçi gibi davranan bir sınıf). Bir ham işaretçi için, '' 've' & 'birbirlerini etkin bir şekilde iptal eder. Ancak akıllı işaretçiler için bu, işaretli nesneye – jalf
bir ham * işaretçisi almanın bir yoludur Üzgünüm, yineleyici ve işaretçi yazdım. Benim hatam –
C++, dereference operatörünün aşırı yüklenmesine izin verir, bu nedenle nesne üzerinde aşırı yüklenmiş yöntemi kullanır ve sonuçta sonucun adresini alır ve işaretçiye yerleştirir.
Adres-işlecini not edin (öneki '&') yeniden tanımlanabilir, ancak aklı başında kodlar bunu yapmaz, dolayısıyla genellikle bunu göz ardı edebilir. – delnan
@delnan: tesadüfen, bu durumda bile [garip hileler] ile adresi alabilirsiniz (http://stackoverflow.com/q/6494591/214671). –
@delnan o kadar eğlenceli olurdu: P –
Bu ifade:
MachineInstr *MI = &*I;
dereferences *
ile I
ve &
ile sonucun adresini alır sonra MachineInstr
bir göstericidir MI
atar. I
bir yineleyici gibi görünüyor, bu nedenle *I
, iterators öğeyi yineleme noktasında döndürmek için *
işlecini tanımladığından bir kapta depolanan değerdir. Kap (örneğin bir liste) bir MachineInstr
içermelidir. Bu bir std::list<MachineInstr>
olabilir.
Bu merak ettiğiniz bir şey mi? – jalf
@jalf: "Aynı komutta referanslama ve dizgeleme" başlığı ile ilgili olarak, her şeyin evet olduğuna işaret ettiğine inanıyorum;) – Zeta
@jalf: Kesinlikle :) Bunu yapmak için herhangi bir neden göremiyorum –