Я обычно использую приведение типа C в коде C / C ++. Мой вопрос: означает ли что-либо добавление ключевого слова "const" в типе приведения к результату?
Например, я могу придумать несколько сценариев:
const my_struct *func1()
{
my_struct *my_ptr = new my_struct;
// modify member variables
return (const my_struct *)my_ptr;
// return my_instance;
}
В этом случае функция создает новый экземпляр структуры и преобразует его в постоянный указатель, поэтому вызывающая сторона не сможет дополнительно изменить свое внутреннее состояние, кроме как удалить его. Является ли приведение типа "const" обязательным, рекомендуемым или просто ненужным, поскольку любой оператор return работает.
В этом 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
уже является указателем const, будет ли приведение его к (my_base *)
включать const_cast для удаления const и другой неявный const_cast при возврате?
Есть ли причина добавлять "const" к целочисленному аргументу функции, поскольку его изменение никогда не влияет на состояние вне функции?
void func3(const int i)
{
// i = 0; is not allowed, but why, as it is harmless?
}
Как насчет добавления "const" при приведении целого числа? Я думаю, что это должно напоминать func2()
.
void func4(short i)
{
const unsigned int j = (const unsigned int) i;
// const unsigned int j = (unsigned int) i;
}
Поправь меня, если я ошибаюсь. Учитывая, что приведение типов может быть часто задаваемым вопросом, я не уверен, дублирует ли это что-нибудь еще. Спасибо!