Литье non const в const в С++
Я знаю, что вы можете использовать const_cast
для приведения a const
к не const
.
Но что вы должны использовать, если хотите отбрасывать не const
до const
?
Ответы
Ответ 1
const_cast
может использоваться для удаления или добавления константы к объекту. Это может быть полезно, если вы хотите вызвать определенную перегрузку.
Упрощенный пример:
class foo {
int i;
public:
foo(int i) : i(i) { }
int bar() const {
return i;
}
int bar() { // not const
i++;
return const_cast<const foo*>(this)->bar();
}
};
Ответ 2
Вам не нужно const_cast
добавить const
ness:
class C;
C c;
C const& const_c = c;
Прочтите этот вопрос и ответ для получения более подробной информации.
Ответ 3
STL, поскольку С++ 17 теперь предоставляет std::as_const
для этого случая.
Смотрите: http://en.cppreference.com/w/cpp/utility/as_const
Использование:
CallFunc( as_const(variable) );
Вместо:
CallFunc( const_cast<const decltype(variable)>(variable) );
Ответ 4
Вы можете использовать const_cast
, если хотите, но это не нужно - неконстант может быть преобразован в const неявно.
Ответ 5
У вас есть неявное преобразование, если вы передаете аргумент non const функции, которая имеет параметр const
Ответ 6
const_cast
можно использовать для добавления поведения const
.
Из cplusplus.com:
Этот тип литья манипулирует постоянство объекта, либо быть установить или удалить.