wszystkim: to jest cytat z Effective C++ 3-ty editiionPytanie o const_cast w C++
const_cast jest zazwyczaj używany do odrzucili constness obiektów. Jest to jedyna obsada w stylu C++, która może to zrobić.
Moje pytanie brzmi czy const_cast może dodać constness do obiektu niestałego? Właściwie napisałem mały program próbujący zatwierdzić moją myśl.
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
}
Pominięcie '&' związana jest z ponoszeniem błąd poniżej:
błędu C2440: 'const_cast': nie można przekonwertować z 'ConstTest' do 'const ConstTest'
pokazuje, że const_cast może dodać constness, ale wydaje się, że musisz rzutować na referencję do obiektu, jaka jest magia tego odniesienia?
Dlaczego chcesz użyć const_cast, aby dodać const? Po prostu przypisz obiekt stały do stałej stałej i gotowe. Nie mam pojęcia, dlaczego odnośnik do konstytucji działa w twoim przypadku. –
Załóżmy, że funkcja składowa ma const i non-const override: w jaki sposób wywołać zastąpienie const dla obiektu niestałego bez wykonywania kopii?(Odpowiedź brzmi "static_cast", ale nie jest od razu jasne, dlaczego 'const_cast' nie powinno również działać w tym przypadku) –
@ Tyler: rzutujesz na referencję do const, na przykład z' static_cast'. –