Bu örnek program, yerel değişkeni, genel değişkeni veya anonim değişkeni geçip geçmediğinize bağlı olarak farklı bir kurucunun nasıl çağrılacağını gösterir. Burada neler oluyor?C++ anonim yapıcı garip şeyler yapıyor
std::string globalStr;
class aClass{
public:
aClass(std::string s){
std::cout << "1-arg constructor" << std::endl;
}
aClass(){
std::cout << "default constructor" << std::endl;
}
void puke(){
std::cout << "puke" << std::endl;
}
};
int main(int argc, char ** argv){
std::string localStr;
//aClass(localStr); //this line does not compile
aClass(globalStr); //prints "default constructor"
aClass(""); //prints "1-arg constructor"
aClass(std::string("")); //also prints "1-arg constructor"
globalStr.puke(); //compiles, even though std::string cant puke.
}
ben aClass(globalStr);
arayarak, küresel globalStr
yerine kullanılan tipte aClass
ait globalStr
adında yerel bir değişken oluşturmak olduğunu tahmin ediyorum, globalStr.puke()
çağırabilir göz önüne alındığında. aClass(localStr);
'u çağırmak aynı şeyi yapmaya çalışır, ancak localStr
zaten std::string
olarak bildirilmiş olduğundan derleme başarısız olur. 1-arg yapıcısını sabit olmayan bir ifadeyle çağırarak bir sınıfın anonim bir örneğini oluşturmak mümkün mü? 'un variableName
isimli bir değişken tanımlamak için kabul edilebilir bir yol olduğuna kim karar verdi?
Ne bir _anonymous constructor_ nedir? Farkında olduğum bir şey yok. –
[Pekala, bu ilginç] (http://ideone.com/eNXYvI), neden bir 'std :: string' sınıfında çağrılabilir puke(). –
@ πάνταῥεῖ, "mainStr" in "main" olarak bildirilmesiyle gölgeleniyor. – chris