2015-10-22 18 views
6

Bu, C++ ile yazılmış bir uygulama içindir. Ben yapmaya çalışıyorum, bir hata ayıklayıcı ile geçmekte olanC++ 'da operatör anahtar kelimesinin kullanımı burada ne anlama geliyor?

operator FILE*(){return stream;} 

: Hangi koşullar altında bu hat (stream tip FILE* üyesi değişkendir) bir struct tanım bağlamında, içinizden herhangi mantıklıdır Bunun anlamı, ancak bu kod satırını aktif hale getiremiyorum. Ben böyle bir şekilde operatör aşırı yüklenen anahtar kelime ile karşılaşmadım. Bu kod satırı ne yapabilir?

+5

operatör örtülü bir olduğunu dönüşüm operatörü. En yaygın biçim, bir sınıf nesnesinin unique_ptr ve shared_ptr – jaggedSpire

cevap

9

Bu bir implicit conversion operator numaralı.

Örtük dönüşüm operatörleri, aksi halde dolaylı olarak bir hedef türüne dönüştürülemeyecek türde bir tür izin verir. Bunlar Foo nesne sınıfı dolaylı dönüştürülecek olan aşağıdaki sözdizimini sahiptir ve Bar hedef sınıfıdır:

bu operatörün daha yaygın örneği mantıksal bir değer olarak bir nesneyi dönüştürme olan
class Foo{ 
public: 
    operator Bar(); // allow implicit conversion of Foo objects to Bar 
}; 

geçerlilik kontrolü. Bu standart kütüphane akışları ve akıllı işaretçiler ile görülebilir.

Sen Mevcut bir dönüşümü engelleyen sözdizimi, bir varyasyonun varlığı dikkat ve bunun yerine açık dönüştürme yapar gerektiğini

:

class Foo{ 
public: 
    explicit operator Bar(); // allow explicit conversion of Foo objects to Bar 
}; 

yanlışlıkla bir tür beslemek Bu bir derleme programı tarafından ısırıldı engeller B türüne dönüştürülebilen A, yalnızca B kabul eden bir işleve dönüştürülebilir. Elbette, için ne istediğinizi olabilir, ama her zaman değil, ve bunu açık bir dönüştürme ihtiyacı olan insanlara yardımcı olmak için bunu dile eklemeye karar verdiler.

Açık dönüştürme operatörü

, origin nesnesi bir nesne oluşturmak ya yapı ile veya açık döküm yoluyla (hedef tip bir nesnenin yapımında kullanarak): B{A}

+0

gibi boolean ifadelerinde kullanılmasına izin veren operatör boolüdür. –