2010-07-18 23 views

cevap

4

Kurucuları süslemek için kullanılır; Bu şekilde dekore edilmiş bir kurucu, örtük dönüşümler için derleyici tarafından kullanılamaz.

class circle { 
    circle(const int r) ; 
} 

    circle c = 3 ; // implicit conversion using ctor 

derleyici burada daire ctor arayacak:

C++ 'de, örneğin, "bir sınıf yapıcısı vasıtasıyla", tek bir kullanıcı tarafından temin edilen dönüştürme, "kullanıcı tarafından sağlanan" terimi kadar izin verir r için 3 değeriyle c döngüsünü oluşturun. Bunu istemediğinizde

explicit kullanılır.

class circle { 
    explicit circle(const int r) ; 
} 

    // circle c = 3 ; implicit conversion not available now 
    circle c(3); // explicit and allowed 
5

explicit anahtar sözcük, örtülü dönüşümleri engeller. explicit anahtar kelime olmadan

// Does not compile - an implicit conversion from const char* to CImg 
CImg image = "C:/file.jpg"; // (1) 
// Does compile 
CImg image("C:/file.jpg"); // (2) 

void PrintImage(const CImg& img) { }; 

PrintImage("C:/file.jpg"); // Does not compile (3) 
PrintImage(CImg("C:/file.jpg")); // Does compile (4) 

, ifadeler (1) ve derleyici (bir const char* kabul yapıcısı aracılığıyla) bir const char* örtülü bir CImg dönüştürülebilir olduğunu görebilirsiniz, çünkü (3) derlemek olacaktır. Bazen bu örtük dönüşüm istenmez çünkü her zaman mantıklı değildir.

İlgili konular