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

  • 99being99

    99being99

    2 EYLÜL 2008
  • FND Films

    FND Films

    2 Mayıs 2006
  • TV and Lust

    TV and Lust

    26 HAZİRAN 2006