Я не знаю, является ли это предполагаемым поведением или нет (если это так, извините, просто закройте эту проблему), но этого явно нельзя допускать!
Скажем,
1) Я хочу, чтобы переменная foo
по умолчанию имела значение 1,
2), и он меняет свое значение, когда пользователь каким-то образом взаимодействует (скажем, ввод).
3) После того, как пользователь закончит, значение foo
должно снова иметь значение 1.
Здесь происходит следующее: функции, связанные с setget
, вызываются каждый раз, когда значение установлено в 1, когда оно уже равно 1, его следует вызывать один раз (в первый раз), когда исходное значение отличается. Для меня это несколько убивает производительность, я знаю, что могу:
if (new_value == old_value):
return
Но делать это нужно автоматически.
Не думаю, что делать это автоматически - хорошая идея. Установка переменной с тем же значением, которое она уже имеет, не должна влиять на производительность, это то, что ваша функция setget
должна обрабатывать при необходимости. Кроме того, добавление проверки значения _ повлияет_ на производительность, поскольку это одно новое (концептуально ненужное) ветвление.
Я также не думаю, что мы можем просто предположить, что установка одного и того же значения не повлияет на установщик, и, следовательно, его можно обойти.
Похоже, у вас очень сложный сеттер, если установка одного значения каждый раз может сильно снизить производительность.
Что ж, обычно, когда вы выполняете только самостоятельное присвоение, это не проблема, но если вы выполняете больше работы, чем присваиваете новое значение, например, что такое «setget», это ухудшает производительность. Особенно, если значение остается неизменным и присваивается самостоятельно каждый кадр.
Кроме того, все компиляторы C ++ (о которых я знаю) защищают вас от таких злодеяний. (По крайней мере, для базовых типов, при перегрузке оператора присваивания вы отменяете эту защиту) На самом деле, я видел, как некоторые утверждения кода проверяют это, чтобы увидеть, остается ли значение таким же после самостоятельного присвоения чисел с плавающей запятой на процессоре amd. Это было сделано для проверки работоспособности какого-то проекта, я забыл, как он назывался.
На мой взгляд, не стоит ломать старый код, когда есть простой обходной путь (у меня есть код, использующий установщик для отображения уведомления пользователю о попытках присвоения одного и того же значения).
Самый полезный комментарий
На мой взгляд, не стоит ломать старый код, когда есть простой обходной путь (у меня есть код, использующий установщик для отображения уведомления пользователю о попытках присвоения одного и того же значения).