yapmak arasındaki fark nedir:"Arkadaş yapısı A" arasındaki fark nedir? ve "arkadaş A;" sözdizimi?
struct A;
struct B { friend struct A; };
ve
struct A;
struct B { friend A; };
ikinci bölümünde struct
dışarı bırakmak ne demektir?
yapmak arasındaki fark nedir:"Arkadaş yapısı A" arasındaki fark nedir? ve "arkadaş A;" sözdizimi?
struct A;
struct B { friend struct A; };
ve
struct A;
struct B { friend A; };
ikinci bölümünde struct
dışarı bırakmak ne demektir?
Buradaki fark, friend A;
yazıyorsa, A
bilinen bir tür adı olmalıdır, bunun daha önce bildirilmesi gerekir. Eğer friend struct A;
yazarsanız
, bu kendisi A
ilanı, bu nedenle önceden hiçbir beyana gerek yoktur: Birkaç incelikler olsa vardır
struct B { friend struct A; }; // OK
. Örneğin, friend class/struct A
sınıfın B
en iç kapsayan ad alanında sınıf A
beyan (Captain Obvlious sayesinde):
A
bir geçerli:
class A;
namespace N {
class B {
friend A; // ::A is a friend
friend class A; // Declares class N::A despite prior declaration of ::A,
// so ::A is not a friend if previous line is commented
};
}
Ayrıca sadece friend A
yazabilirsiniz diğer bazı durumlar vardır typedef-adı:
olursa olsun
template<typename A>
struct B {
// friend class A; - ill-formed
friend A;
};
IIRC, ikincisi, tam arkadaş türü A' kullanabilirsiniz? – quetzalcoatl
@quetzalcoatl hayır, [sen olamaz] (http://coliru.stacked-crooked.com/a/f080bdde9d602ac1), muhtemelen [bu] (ile karıştırıyorsun http://coliru.stacked-crooked.com/a/818df2034d15bcf6) –
@CaptainObvl Bu yazdığın için teşekkürler, cevabı güncelledim. –
Hiçbir şey sağladığınız parçacıkları verilen:bir şablon parametresidir. – Sneftel
İkinci kod snippet'ına gelince, #define Bir boşluk foobar (int, double) 'dır, ancak struct A'nın bir önceki ileri bildirimi, (yarım) şakayı geçersiz kılar. Eh. – quetzalcoatl
Önerdiğim başlık değişikliğine katılmamanız durumunda, reedit için çekinmeyin. Sadece orijinal başlık daha çok benzediğini düşündüm .. genç akran desteği forum: | Belki bugün bu sadece benim .. – quetzalcoatl