Задать вопрос

Где посмотреть, какие операции можно применить к определенному типу данных в C++?

К примеру, у типа bool есть инкремент, но нет декремента, как это узнать не проверяя все вручную?
  • Вопрос задан
  • 263 просмотра
Подписаться 4 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега C++
software engineer
Это legacy наследние, которое сейчас считается устаревшим.
Когда трава была зеленее, а С++ еще слишком молод, в чистом С вообще не было boolean, поэтому использовался int, который использовался в качестве flag переменных.
При этом 0+1 = true, 1+1 = true, 2+1 = true (все верно)
Но при этом 1-0=false (верно), однако 2-1=true, 3-1=true.

Поэтому никогда никто не использовал декремент для подобных значений - иначе это могло привести к ошибке. Собственно инкремент тоже теоретически мог однажды переполниться...

Когда появился boolean, то для совместимости сохранили возможность инкремента boolean, но с самого начала это считалось deprecated.

The value obtained by applying a postfix ++ is the value that the operand had before applying the operator. [Note: the value obtained is a copy of the original value ] The operand shall be a modifiable lvalue. The type of the operand shall be an arithmetic type or a pointer to a complete object type. After the result is noted, the value of the object is modified by adding 1 to it, unless the object is of type bool, in which case it is set to true. [Note: this use is deprecated, see annex D. ]


Кстати это в 2015 году уже официально отменили:
www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p...
"The ++ operator for bool was deprecated in the original 1998 C++ standard, and it is past time to formally remove it.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы