Açık (C++)
Otomatik olarak tek bir parametreye sahip C++ Kurucular örtük tür dönüştürmesi gerçekleştirir. Örneğin, başarılı olursa, bir int Oluşturucu dize işaretçisi parametre bekler, derleyici dönüştürmek olmalıdır kod ekleyeceksiniz int bir dize işaretçisi için. Ancak, her zaman bu otomatik davranışı istemeyebilirsiniz.
Ekleyebileceğiniz explicit örtük dönüştürmeler önlemek için yapıcı bildirimi için. Bu kod doğru türde parametre kullanmak veya doğru tür parametresi artığını zorlar. Diğer bir deyişle, cast ölçeklendirirseniz kodunda ifade değil, bir hata neden olur.
explicit Anahtar sözcüğü yalnızca uygulanabilir sınıf yapıcısı bildirimleri açıkça bir nesne oluşturmak için.
Aşağıdaki program derleme hatası üretecektir. Kullanımı, ancak bir örtük dönüştürme gerçekleştirmek kod çalışır explicitanahtar sözcüğünü engeller. Hatayı gidermek için kaldırma explicit anahtar sözcükler ve kodu ayarlamak g.
// spec1_explicit.cpp
// compile with: /EHsc
#include <stdio.h>
class C
{
public:
int i;
explicit C(const C&) // an explicit copy constructor
{
printf_s("\nin the copy constructor");
}
explicit C(int i ) // an explicit constructor
{
printf_s("\nin the constructor");
}
C()
{
i = 0;
}
};
class C2
{
public:
int i;
explicit C2(int i ) // an explicit constructor
{
}
};
C f(C c)
{ // C2558
c.i = 2;
return c; // first call to copy constructor
}
void f2(C2)
{
}
void g(int i)
{
f2(i); // C2558
// try the following line instead
// f2(C2(i));
}
int main()
{
C c, d;
d = f(c); // c is copied
}
Bildirmek için birden fazla değişken olan bir kurucu explicit bu tür Kurucular içinde örtük dönüştürmeler bölümü alınamıyor çünkü herhangi bir etkisi yoktur. Ancak, explicit bir varsayılan değere sahip bağımsız değişkenlerden biri dışında birden fazla değişken ve tüm bir kurucu varsa bir etkisi olmaz.