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

  • efaustus9

    efaustus9

    16 HAZİRAN 2006
  • ibebrent

    ibebrent

    23 Temmuz 2007
  • tunez4you

    tunez4you

    20 EKİM 2008