Observation: the codes pasted below were tested only with GCC 4.4.1, and I'm only interested in them working with GCC.
Nesne inşaat/İleri fonksiyon bildirimi belirsizlik
Merhaba,
Ben anlamadım bir nesne inşaat deyimi içine düştüğüm sadece birkaç kez değildi ve sadece bugün onun hangi belirsizliğin ortaya çıktığını fark ettim. Nasıl çoğaltılacağını açıklayacağım ve düzeltmenin bir yolu olup olmadığını öğrenmek istiyorum (C++ 0x izinli). İşte gidiyor.
Kurucunun yalnızca bir argüman aldığı bir sınıf olduğunu ve bu argümanın türünün varsayılan kurucuya sahip başka bir sınıf olduğunu varsayalım. Ör:
Class c(ArgType()); // is this an object construction or a forward declaration
// of a function "c" returning `Class` and taking a pointer
// to a function returning `ArgType` and taking no arguments
// as argument? (oh yeh, loli haets awkward syntax in teh
// saucecode)
Ben bir nesne inşaat olduğunu söylüyorsun ama derleyici bir ileri ilanıdır ısrar: Ben yığın tip Class
bir nesne oluşturmak çalışırsanız
struct ArgType {};
class Class
{
public:
Class(ArgType arg);
};
, ben bir belirsizlik olsun işlev gövdesinin içinde. Hala almayanlar için, tam olarak bir örnek aşağıdadır:
#include <iostream>
struct ArgType {};
struct Class {};
ArgType func()
{
std::cout << "func()\n";
return ArgType();
}
int main()
{
Class c(ArgType());
c(func); // prints "func()\n"
}
Class c(ArgType funcPtr()) // Class c(ArgType (*funcPtr)()) also works
{
funcPtr();
return Class();
}
Çok iyi, yeterli örnekler. Herhangi bir şey, anti-deyimsiz bir şey yapmadan (bir kütüphane geliştiricisiyim ve deyimsel kütüphaneler gibi insanlar) bunu yapmama yardım edebilir mi?
- düzenle
Boşver. Bu, Most vexing parse: why doesn't A a(()); work?'un bir kopyasıdır.
Teşekkürler sbi.
Kodunuz ++ g benim için derler örneklere - Çalışmadığınız gerektiğini düşünüyorum hangi bit? –
Çalışmak veya çalışmamak meselesi değil. Sorun şu ki, sadece 'Class' türünde bir nesneyi oluşturmak ve kurucusunu inline yapılmış bir argtype türünden bir nesneyi aktarmak istedim .. Ama ileriye dönük bir beyan olarak kabul ediyor. Çalışmak istediğim kodu ekleyeceğim ama sadece bir saniye yapamam. –
Unut bunu, Neil. Sbi'nin cevabına bak, tam olarak benim problemim. –