SORU
23 Kasım 2011, ÇARŞAMBA


Döküm operatörü açık olabilir mi?

Kurucular için, anahtar kelime ekleme geldiğinde explicit programcı ilk niyetim değildi ne zaman bir nesne oluşturarak coşkulu bir derleyici engeller. Bu mekanizma döküm operatörleri için kullanılabilir mi?

struct Foo
{
    operator std::string() const;
};

Burada, örneğin, 6 ** ama istemiyorum böyle bir kalıba Foo dökme mümkün örtülü olmasını isterdim.

CEVAP
23 Kasım 2011, ÇARŞAMBA


Evet ve Hayır.

Kullanmakta olduğunuz bağlıdır.

  • Ve C 03 C 98 explicit tür dönüştürme operatörleri desteklemez
  • Ama C 11.

Örneğin,

struct A
{
    //implicit conversion to int
    operator int() { return 100; }

    //explicit conversion to std::string
    explicit operator std::string() { return "explicit"; } 
};

int main() 
{
   A a;
   int i = a;  //ok - implicit conversion 
   std::string s = a; //error - requires explicit conversion 
}

Bunu alacak g -std=c 0x, Bu hata: derleme

prog.:13:20 cpp: hata: dönüşüm', Bir' non-skaler tip":: std string' istedi

Online demo : http://ideone.com/DJut1

Ama sen yaz bitmez:

std::string s = static_cast<std::string>(a); //ok - explicit conversion 

Kaybolduktan hata : http://ideone.com/LhuFd

BTW, C 11, açıkça dönüştürme operatörü olarak adlandırılır< . em ^"bağlamsal dönüşüm operatör"eğer dönüştürürboolean.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BgirlNilaya

    BgirlNilaya

    29 EKİM 2008
  • ICON

    ICON

    19 EKİM 2011
  • Krumme1996

    Krumme1996

    21 EYLÜL 2009