Два рекомендуемых передовых метода, основанных на опыте:
(1) По возможности объявляйте константные функции. Сначала я обнаружил, что это просто дополнительная работа, но затем я начал передавать свои объекты функциям с сигнатурами типа f (const Object & o), и внезапно компилятор отключил строку в f, такую как o.GetAValue (), потому что Я не пометил GetAValue как константную функцию. Это может вас удивить, особенно когда вы подклассифицируете что-то и не помечаете свою версию виртуальных методов как const - в этом случае компиляция может завершиться неудачно для какой-то функции, о которой вы никогда раньше не слышали, которая была написана для базового класса.
(2) По возможности избегайте изменяемых переменных. Заманчивой ловушкой может быть разрешение операциям чтения изменять состояние, например, если вы создаете «умный» объект, который выполняет ленивые или асинхронные операции ввода-вывода. Если вы можете справиться с этим с помощью только одной небольшой изменяемой переменной (например, bool), то, по моему опыту, это имеет смысл. Однако, если вы обнаружите, что помечаете каждую переменную-член как изменяемую, чтобы некоторые операции оставались константными, вы теряете цель ключевого слова const. Что может пойти не так, так это то, что функция, которая думает, что она не изменяет ваш класс (поскольку она вызывает только методы const), вызывает ошибку в вашем коде, и может потребоваться много усилий, чтобы даже понять, что эта ошибка находится в вашем классе, поскольку другой кодировщик (справедливо) предполагает, что ваши данные являются константными, потому что он или она вызывает только константные методы.
person
Tyler
schedule
12.09.2008