Ошибки, баги, вопросы - страница 3227
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Статически тоже нельзя. Объект создается без каких-либо ограничений, а вот переменная, которая на него ссылается, имеет ограничения.
const - это не украшение - в грамотных компиляторах const объекты помещают в защищенную (только для чтения) область памяти, т.е. вы даже явно (обойдя программные ограничения) не сможете его изменить
Отсутствует сообщение компилятора об ошибке:
А должно быть!
Вижу что компилятор C++ выдает сообщение об ошибке, но не могу понять почему, в чем смысл?
Насколько я понимаю, смысл слова const в "void f( const A*& ) {}" в том, что ф-я не должна изменять объект, указываемый параметром.
Но почему нельзя передавать в ф-ю указатель на не-const объект?
Можете объяснить?
Можете объяснить?
Вот код:
Если (*) компилируется без ошибки, тогда вместо (1) можно было бы записать (2) - т.е. мы неявно обходим ограничение (1), поэтому С++ при компиляции (*) выдает ошибку
Вот код:
Если (*) компилируется без ошибки, тогда вместо (1) можно было бы записать (2) - т.е. мы неявно обходим ограничение (1), поэтому С++ при компиляции (*) выдает ошибку
Вот код:
Если (*) компилируется без ошибки, тогда вместо (1) можно было бы записать (2) - т.е. мы неявно обходим ограничение (1), поэтому С++ при компиляции (*) выдает ошибку
Пока не вижу проблемы.
И пора бы уже добавить ошибку компилятора в следующем месте:
P.S. Или хотя бы warningПока не вижу проблемы.
Вы путаете явное и неявное преобразование. Вы явно преобразовали const к non const, а здесь неявное (помимо воли пользователя)
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
A100, 2022.08.22 18:49
const - это не украшение - в грамотных компиляторах const объекты помещают в защищенную (только для чтения) область памяти, т.е. вы даже явно (обойдя программные ограничения) не сможете его изменить
Грамотный компилятор поместит const объект в защищенную (только для чтения) память. Неявное преобразование будет пытаться его изменить, но не сможет - т.е. при выполнении будет трудноуловимая вычислительная ошибка. А явное преобразование указывает компилятору, что const объект не нужно помещать в защищенную память, поскольку он будет в дальнейшем изменен
Вы путаете явное и неявное преобразование. Вы явно преобразовали const к non const, а здесь неявное (помимо воли пользователя)
Неявные же по четким правилам должны происходить. Почему здесь это правило не прописано - не знаю. Вместо ошибки логично выдавать предупреждение и только.
В этом и заключается проблема:
Грамотный компилятор поместит const объект в защищенную (только для чтения) память. Неявное преобразование будет пытаться его изменить, но не сможет - т.е. при выполнении будет трудноуловимая вычислительная ошибка. А явное преобразование указывает компилятору, что const объект не нужно помещать в защищенную память, поскольку он будет в дальнейшем изменен
Странная логика, когда const-объект становится nonconst.
Поэтому и говорю, что все объекты являются nonconst. И только переменные (включая временные), что на них ссылаются, могут иметь свойство const.