При чтении статьи this кажется, что оператор + унарный. Как так. С моей точки зрения, унарный оператор - это оператор, который не зависит от другой переменной для ее работы, как ++ a или a--. Как переменная «+» унарная. Я думал, что он двоичный? Буду признателен, если кто-нибудь сможет это прояснить.является оператором «+» унарным или двоичным?
ответ
+
является и унарным, и двоичным оператором. Форма унарного +
(+a
) заставляет операнд оцениваться как число или указатель, тогда как бинарная форма +
(a + b
) является дополнением.
Унарный +
, как правило, противоположный унарный -
; применение его к любому числовому значению не изменит его. (+1 == 1
) Тем не менее, есть некоторые виды использования, в том числе заставляя массив распадаться на указатель:
template <typename T> void foo(const T &) { }
void test() {
int a[10];
foo(a); // Calls foo<int[10]>()
foo(+a); // Calls foo<int*>()
}
(Demo)
Это та же сделка с -
и *
операторов. У вас есть -a
(отрицание) и a - b
(вычитание); *a
(разыменование указателя) и a * b
(умножение).
Вы перегружаете обе версии по-разному. Для перегрузки с помощью функций-членов:
public:
T operator+() const; // Unary
T operator+(const U &) const; // Binary
Как и с любой другой перегрузкой оператора, обе формы могут возвращать значение, отличное от их типа ограждающего; например, у вас может быть класс строк, operator+()
возвращает числовой тип. Это было бы согласуется с соглашением унарного +
, оценивающим его операнд как число.
Вы можете перегрузить эти операторы как свободные функции тоже:
T operator+(const U &); // Unary, called on type U and returns T.
T operator+(const U &, const V &); // Binary, called on types U and V and returns T.
Унарных + как в + а определяется в дополнение унарным - (-a). Это «дефолт», поэтому на самом деле не часто, если он когда-либо использовался. Однако он может использоваться с переменными, относящимися к классам, где он может быть перегружен, чтобы иметь значение класса. Так что это совсем не бесполезно.
- 1. Перегруженный оператор ++ должен быть унарным или двоичным оператором (имеет 3 параметра)
- 2. Antlr4 определяет оператор, который может быть унарным или двоичным
- 3. Проблема с двоичным оператором '-'
- 4. Почему Numeric относится к унарным по-разному к двоичным?
- 5. Option.fold - почему его второй аргумент не является двоичным оператором?
- 6. SQLite.swift, вызывающий оператора, не является известным двоичным оператором
- 7. JMS Protocol является текстовым или двоичным
- 8. Определить, является ли файл двоичным или текстовым
- 9. Совместимость с двоичным оператором для оболочки
- 10. Какое приложение является двоичным docker?
- 11. Проверьте, является ли файл двоичным
- 12. Проверьте, является ли изображение двоичным
- 13. Является ли «:::» оператором?
- 14. Моно - Проблема с двоичным оператором между двумя разными типами
- 15. является оператором в Python
- 16. Mock является оператором
- 17. Ruby: что является оператором '= ~'
- 18. Как проверить, является ли файл ASCII или двоичным в PHP
- 19. Ruby: Как определить, является ли чтение файла двоичным или текстовым
- 20. Как проверить, является ли файл ASCII или двоичным в C++
- 21. Проверьте, является ли файл двоичным или ASCII с Node.js?
- 22. Проверка того, что файл STL является ASCII или двоичным.
- 23. Обнаружение, если файл является двоичным или обычным текстом?
- 24. Определение того, является ли тип MIME двоичным или текстовым
- 25. Указанный файл является непризнанным или неподдерживаемым двоичным форматом
- 26. linux + проверить, является ли файл текстовым или двоичным
- 27. Чтобы узнать, является ли дерево двоичным деревом поиска или нет
- 28. Java: Сравнение между двумя массивами с двоичным оператором
- 29. Является ли это полным двоичным деревом?
- 30. VB.Net - Проверьте, если файл является двоичным .net
Унарный плюс ('+ x') и двоичный плюс (' a + b'). Он должен иметь в виду только один. – 0x499602D2
Унарные, они означают, что его можно использовать для указания знака. Как в '(-) для отрицательных' и' (+) для положительных' – saruftw