Neden C bize bir değişkeni bildirirken değişkeni parantez içinde adını çevreleyen izin veriyor mu?
Örneğin bu gibi bir beyan:
int (x) = 0;
Ya da bu:
int (((x))) = 0;
Bunun üzerine benim kod parçası aşağıdaki biri için benzer bende de oldu çünkü tökezledi:
struct B
{
};
struct C
{
C (B *) {}
void f () {};
};
int main()
{
B *y;
C (y);
}
Belli ki bir şeyler yap o zaman hangi nesne C
kendi yıkıcı yararlı inşa etmek istedim. Ne olursa, derleyici y
tip C
değişken bildirimi C (y);
davranır ve böylece y
yeniden tanımlanmasıyla ilgili bir hata yazdırır. İlginç olan şey ben C (static_cast<B*> (y))
gibi bir şey gibi C (y).f ()
olarak veya yazma amaçlı olarak derlenir. En iyi modern çözüm tabii ki kurucusunu çağırmak {}
kullanmaktır.
Sonra düşündüm, mümkün int (x) = 0;
int (((x))) = 0;
gibi değişkenleri bildirmek için, ama hiç kimse aslında bu gibi tanımlamalar kullanarak gördüm. "En can sıkıcı ayrıştırma" ve işe yarar bir şey katmıyor?- şimdilik sadece dava azılı benzer oluşturur gördüğüm için böyle bir olasılık amacı bu konu çok ilgimi çekiyor
CEVAP
Gruplandırma.
Belirli bir örnek olarak, fonksiyon bu tür bir değişken olarak bildirebilirsiniz düşünün
int f(int);
Şimdi, nasıl böyle bir şey için bir işaretçi bildirmek istiyorsunuz?
int *f(int);
Hayır, işe yaramıyor! Bu fonksiyon int*
iade olarak yorumlanır. Parantez içinde bunu doğru şekilde çözümleme yapmak için eklemek gerekir:
int (*f)(int);
Diziler: aynı şekilde
int *x[5]; // array of five int*
int (*x)[5]; // pointer to array of five int
Neden Java bize bir isim dosya adından...
Neden C sınıfı üye değişkeni üzerinde ...
Neden gcc bağımsız bir işlev bağımsız ...
Neden liste üreteçleri döngü değişkeni...
Linux ortam değişkeni adları izin veri...