Я знаю, что вы можете использовать const_cast, чтобы разыграть const в не-const.
const_cast
const
Но что вы должны использовать, если вы хотите разыграть не-const в * 1007?*
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(); } };
Вам не нужно const_cast, чтобы добавить const ness:
class C; C c; C const& const_c = c;
Пожалуйста, прочитайте этот вопрос и ответ для деталей.
STL, поскольку C ++ 17 теперь предоставляет std::as_const именно для этого случая.
std::as_const
См .: http://en.cppreference.com/w/cpp/utility/as_const
Использование:
CallFunc( as_const(variable) );
Вместо:
CallFunc( const_cast<const decltype(variable)>(variable) );
Вы можете использовать const_cast, если хотите, но это на самом деле не нужно - неконстантные можно неявно преобразовать в константные.
const_cast также может использоваться для добавления const поведения ness.
От cplusplus.com :
Этот тип приведения манипулируетпостоянство объекта, который должен быть установлен или удален.
У вас есть неявное преобразование, если вы передаете неконстантный аргумент функции, которая имеет параметр const