Подтвердить что ты не робот

Литье non const в const в С++

Я знаю, что вы можете использовать const_cast для приведения a const к не const.

Но что вы должны использовать, если хотите отбрасывать не const до const?

4b9b3361

Ответ 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:

Этот тип литья манипулирует постоянство объекта, либо быть установить или удалить.