Я обычно использую преобразование типа 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, я не уверен если эти дубликаты с чем-либо еще.Спасибо!