https://www.mql5.com/ru/docs/basis/oop/staticmembers
Метод с модификатором const называется постоянным и не может модифицировать неявные члены своего класса. Объявление постоянных функций класса и постоянных параметров называется контролем постоянства (const-correctness). Благодаря такому контролю можно быть уверенным, что компилятор проследит за неизменностью значений объектов и выдаст ошибку еще на стадии компиляции в случае нарушения.
Модификатор const ставится после списка аргументов внутри объявления класса. Определение вне класса также должно включать модификатор const:
тестовый класс создайте - один метод и одно поле и попробуйте изменить поле в классе вызвав этот метод добавив/убрав модификатор const
Понятно, спасибо! )
А что за неявные члены класса? Кроме, this можно привести пару примеров?
Понятно, спасибо! )
А что за неявные члены класса? Кроме, this можно привести пару примеров?
Насколько я понимаю, это члены класса, объявленные у предков.
Я использую модификатор функции const, для того, чтобы обозначить, что эта функция не меняет состояние объекта, у которого ее вызывают. То есть, при вызове функции с таким модификатором - я могу быть полностью уверен, что после вывода внутри данного объекта никаких изменений не произойдет.
Грубо говоря, если у нас есть объект-сумматор, в который мы будем с помощью функции добавлять значения, то после вызова у него функции с модификатором const - можно быть уверенным, что сумма останется прежней. А вот если такого модификатора у функции нет, но значение суммы во время работы функции может быть и изменено. Функции типа GetXXX() - я всегда стараюсь делать константными. Ну а функции типа SetXXX() - константными сделать невозможно (по их смыслу). Соответственно, и при вызове - внутреннее состояние после SetXXX() меняется, а после GetXXX() - нет.
Очень полезный модификатор. Позволяет избегать ошибок использования функций.
Насколько я понимаю, это члены класса, объявленные у предков.
Я использую модификатор функции const, для того, чтобы обозначить, что эта функция не меняет состояние объекта, у которого ее вызывают. То есть, при вызове функции с таким модификатором - я могу быть полностью уверен, что после вывода внутри данного объекта никаких изменений не произойдет.
Грубо говоря, если у нас есть объект-сумматор, в который мы будем с помощью функции добавлять значения, то после вызова у него функции с модификатором const - можно быть уверенным, что сумма останется прежней. А вот если такого модификатора у функции нет, но значение суммы во время работы функции может быть и изменено. Функции типа GetXXX() - я всегда стараюсь делать константными. Ну а функции типа SetXXX() - константными сделать невозможно (по их смыслу). Соответственно, и при вызове - внутреннее состояние после SetXXX() меняется, а после GetXXX() - нет.
Очень полезный модификатор. Позволяет избегать ошибок использования функций
Супер! Спасибо!
Модификатор const означает, что переменной не присваиваются новые значения (а если метод, то в методе члены класса не изменяются), и вроде как объявление переменой с этим модификатором делает ее быстрее - в этом смысл. Но вроде как современные компиляторы все оптимизируют, и уж наверно с переменой могут сами разобраться, присваиваются ей значения или нет. Поэтому остается гипотеза, что они нужны для группой разработки, чтобы тот, кто не должен, не изменили то, что ему не положено. А если сам для себя пишешь...
Впрочем, можно поэкспериментировать, работает ли переменно с const быстрее обычной. Если нет, то и смысла в ней нет, если для себя пишешь.
Интересно, что думает по этому поводу товарищ Саахов?
Поэтому остается гипотеза, что они нужны для группой разработки, чтобы тот, кто не должен, не изменили то, что ему не положено. А если сам для себя пишешь...
...то через год, когда забудешь, как реализована твоя же библиотека, этот модификатор может уберечь от ошибки.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброго дня!
для чего служит служебное слово const после сигнатуры метода?