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

  • case LianLi

    case LianLi

    28 Mayıs 2010
  • modica89

    modica89

    24 HAZİRAN 2007
  • pissengehen

    pissengehen

    26 EYLÜL 2006