const_cast
yalnızca orijinal olmayan bir değişkeni atıyorsanız güvenlidir const
. Örneğin, bir a parametresini alan bir fonksiyonunuz varsa const char *
ve bir değiştirilebilir parametresini iletirseniz char *
, o const_cast
parametreye geri dönüp onu değiştirmek güvenlidir char *
. Ancak, orijinal değişken gerçekte ise const
, o zaman kullanmak const_cast
tanımsız davranışla sonuçlanacaktır.
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);
func(unmodifiable, strlen(unmodifiable), false);
func(unmodifiable, strlen(unmodifiable), true);
const
nesneyi , tanımlanmamış birconst
referans / işaretçi yoluyla değiştirmeye çalışırsanız, bu güvensiz hale gelir . Bunun yerine, yalnızca referansconst_cast
olmayanı kabul eden,const
ancak yalnızcaconst
yöntemlerde kullanılacak olan , yetersiz (veya benim durumumda tembel olarak) spesifik bir API etrafında çalışmak istiyorsanız ... hiçbir sorun yok.