SORU
10 Aralık 2008, ÇARŞAMBA


Const_cast güvenli mi?

Const_cast ile ilgili pek bilgi bulamıyorum. Bulabildiğim tek bilgi Yığın Taşması ():

Const_cast<>()/değişken. sabit(ness) (veya değişken-lik) eklemek veya kaldırmak için kullanılır

Bu beni geriyor. Kullanarak bir const_cast beklenmeyen davranışlara neden olabilir? Eğer öyleyse, ne?

Alternatif olarak, ne zaman const_cast kullanmak için tamam mı?

CEVAP
10 Aralık 2008, ÇARŞAMBA


const_cast başlangıçta olmayanconst bir değişken döküm ancak bu kadar güvenli. Örneğin, bir fonksiyon bir parametre alır bir const char * ve pas bir değiştirilebilir char *, kasa const_cast Bu parametre, geri char * ve değiştir. Eğer orijinal değişken aslında, eğer const const_cast kullanarak tanımsız davranışlara neden olur.

void func(const char *param, size_t sz, bool modify)
{
    if(modify)
        strncpy(const_cast<char *>(param), sz, "new string");
    printf("param: %s\n", param);
}

...

char buffer[16];
const char *unmodifiable = "string constant";
func(buffer, sizeof(buffer), true);  // OK
func(unmodifiable, strlen(unmodifiable), false); // OK
func(unmodifiable, strlen(unmodifiable), true);  // UNDEFINED BEHAVIOR

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chuck Testa

    Chuck Testa

    14 AĞUSTOS 2011
  • Mindy

    Mindy

    20 NİSAN 2006
  • NYCarspotter

    NYCarspotter

    26 EYLÜL 2011