Код говорит более тысячи слов, так что ...
Это неопределенное поведение для мутирования const int
:
struct foo {
int x;
void modify() { x = 3; }
};
void test_foo(const foo& f) {
const_cast<foo&>(f).modify();
}
int main(){
const foo f{2};
test_foo(f);
}
Как насчет этого:
struct bar {
void no_modify() { }
};
void test_bar(const bar& b) {
const_cast<bar&>(b).no_modify();
}
int main(){
const bar b;
test_bar(b);
}
Разрешено ли вызывать неконстантный метод для константного объекта (через const_cast
), когда метод не изменяет объект?
PS : Я знаю, что no_modify
должен был быть объявлен как const
, и тогда вопрос не имеет смысла, но предположим, что определение bar
не может измениться.
PPS : Просто будьтеконечно: не делайте этого дома (или где-либо еще). Я бы никогда не позволил такому коду пройти проверку. В ролях можно избежать тривиально. Это вопрос языка юриста.