приведение не const к const в c ++ - PullRequest
46 голосов
/ 02 мая 2011

Я знаю, что вы можете использовать const_cast, чтобы разыграть const в не-const.

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

Ответы [ 6 ]

47 голосов
/ 02 мая 2011

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(); 
    }
};
28 голосов
/ 02 мая 2011

Вам не нужно const_cast, чтобы добавить const ness:

class C;
C c;
C const& const_c = c;

Пожалуйста, прочитайте этот вопрос и ответ для деталей.

27 голосов
/ 29 сентября 2014

STL, поскольку C ++ 17 теперь предоставляет std::as_const именно для этого случая.

См .: http://en.cppreference.com/w/cpp/utility/as_const

Использование:

CallFunc( as_const(variable) );

Вместо:

CallFunc( const_cast<const decltype(variable)>(variable) );
5 голосов
/ 02 мая 2011

Вы можете использовать const_cast, если хотите, но это на самом деле не нужно - неконстантные можно неявно преобразовать в константные.

2 голосов
/ 02 мая 2011

const_cast также может использоваться для добавления const поведения ness.

От cplusplus.com :

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

2 голосов
/ 02 мая 2011

У вас есть неявное преобразование, если вы передаете неконстантный аргумент функции, которая имеет параметр const

...