препроцессор — #define ^ в c ++ не допускается

Я не в состоянии придать отдельный смысл ^ с помощью #define, лайк #define ^ +,
Но где, как я могу придать смысл $ с помощью #define , лайк #define $ +,

Не могли бы вы, пожалуйста, дайте мне знать, как $ отличается от ^?
По какому правилу стандарта c ++ это ^ не допускается?

Я использую VC ++ 2012, не пробовал с GCC или любым другим инструментом.

1

Решение

^ является оператором в C ++. Это побитовый XOR. Пожалуйста, прочитайте https://www.tutorialspoint.com/cplusplus/cpp_operators.htm

Операторы не могут быть «переопределены» таким образом, их нужно перегрузить. C ++ позволяет указывать более одного определения для имени функции или оператора в одной и той же области видимости, что называется перегрузкой функции и перегрузкой оператора соответственно (https://www.tutorialspoint.com/cplusplus/cpp_overloading.htm
а также https://en.wikibooks.org/wiki/C%2B%2B_Programming/Operators/Operator_Overloading#Bitwise_operators)

Для побитовых операторов, как правило, они имеют более низкий приоритет, чем арифметические операторы, поэтому, если ^ будет перегружен для возведения в степень, x ^ y + z может работать не так, как ожидалось.

Для XOR каноническая форма: Type operator^(const Type &lhs, const Type &rhs); // Bitwise exclusive or, а для версий функций-членов: Type &operator^=(const Type &rhs); // Assign exclusive or,

ссылка: http://articles.emptycrate.com/2009/10/12/nobody_understands_c_part_8_operator_overloading.html

4

Другие решения

Правила для имен макросов препроцессора те же, что и для идентификаторов: они могут содержать только прописные и строчные буквы, подчеркивания и только цифры. Первый символ в идентификаторе не может быть цифрой.

Это означает, что невозможно использовать #define переопределить значение таких операторов, как ^,

В стандартном C ++ это также исключает идентификаторы, содержащие $, Однако некоторые компиляторы поддерживают идентификаторы, содержащие $ как продолжение.

3

^ — это оператор, который вы можете использовать для получения ввода строк с пробелом, подобных этому scanf («% [^ \ n] s,&х) … Таким образом, вы можете только перегрузить его и не определять его, как он уже был определен

-2
По вопросам рекламы [email protected]