C преобразование типа с ключевым словом “константы”

Я обычно использую преобразование типа C в коде C/C++. Мой вопрос, делает добавление, что ключевое слово "константы" в типе кастинга значит что-нибудь для результата?

Например, я могу продумать несколько сценариев:

const my_struct *func1()
{
   my_struct *my_ptr = new my_struct;

   // modify member variables

   return (const my_struct *)my_ptr;
   // return my_instance;
}

В этом функция создает новый экземпляр структуры и кастинг его к к постоянному указателю, поэтому вызывающая сторона не сможет далее изменить его внутреннее состояние кроме удаления его. Кастинг "константы", требуемый, рекомендуемый или просто ненужный, начиная с любого оператора возврата работы.

В этом, my_base базовый класс my_derive.

const my_base *func2(const my_derive *my_ptr)
{
    return (const my_base *)my_ptr;
    // return (my_base *)my_ptr;
}

С тех пор my_ptr уже указатель константы, был бы, бросая его с (my_base *) включите const_cast для удаления константы и другого неявного const_cast при возврате?

Там какая-либо причина состоит в том, чтобы добавить "константу" к целочисленному аргументу функции, начиная с изменения его никогда не влияют на состояние вне функции?

void func3(const int i)
{
    // i = 0; is not allowed, but why, as it is harmless?
}

Как насчет того, чтобы добавить "константу" при кастинге целого числа? Я думаю, что это должно напомнить func2().

void func4(short i)
{
    const unsigned int j = (const unsigned int) i;
    // const unsigned int j = (unsigned int) i;
}

Исправьте меня, если я неправ. Рассмотрением преобразования типа мог бы быть FAQ, я не уверен если эти дубликаты с чем-либо еще.Спасибо!

5
задан Crend King 6 August 2010 в 06:48
поделиться