В C ++ квалификатор const
является классификатором типа.На самом деле, квалифицированным по имени const является (после стандарта) разработанный тип .
При выполнении разрешения перегрузки функции компиляторы, таким образом, применяют обычный механизм, который запрещает вам вызывать void foo(int)
с std::string
в качестве аргумента, например.
Они могут, однако, иметь лучшую диагностику для этой конкретной ошибки, чтобы помочь разработчику.
В C ++ это особенно иллюстрируетсяфакт, что const_cast
доступен для удаления константности объекта ... Существует только одна тонкость:
Объекты, которые создаются в области видимости файла(globals, statics, ...) и объявленные const
могут быть помещены в постоянную память по усмотрению компилятора, в этом случае попытка const_cast
означает неопределенное поведение .