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

  • Dopelives

    Dopelives

    30 Temmuz 2009
  • newport83

    newport83

    19 HAZİRAN 2006
  • SuppressedStorm

    SuppressedSt

    11 AĞUSTOS 2013