все: это цитируется из 3-й редакции эффективного C ++
. const_cast обычно используется для отказа от константности объектов. Это единственное приведение типов в стиле C ++, которое может это сделать.
У меня вопрос: может ли const_cast добавить константу неконстантному объекту? На самом деле я написал небольшую программу, пытаясь подтвердить мою мысль.
class ConstTest
{
public:
void test() {
printf("calling non-const version test const function \n");
}
void test() const{
printf("calling const version test const function \n");
}
};
int main(int argc,char* argv){
ConstTest ct;
const ConstTest cct;
cct.test();
const_cast<const ConstTest&>(ct).test();//it is wrong to write this statement without the '&',why
}
Отсутствие символа '&' приводит к ошибке ниже:
ошибка C2440: 'const_cast': невозможно преобразовать из 'ConstTest' в 'const ConstTest'
Это показывает что const_cast может добавить константу, но похоже, что вам нужно привести ссылку на объект, в чем волшебство этой ссылки?