我无法使用^
给#define
赋予单独的含义,例如#define ^ +
。但正如我能够使用$
给#define
赋予意义,就像#define $ +
一样。
你能不能让我知道$
与^
有何不同?
关于c ++标准的规则,这个^
是不允许的?
我正在使用VC ++ 2012,没有尝试使用GCC或任何其他工具。
^
是C ++中的运算符。这是一个按位异或。请阅读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
预处理器宏的名称规则与标识符的规则相同:它们只能包含大写和小写字母,下划线和数字。标识符中的第一个字符不能是数字。
这意味着不可能使用#define
重新定义像^
这样的运算符的含义。
在标准C ++中,这也排除了包含$
的标识符。但是,某些编译器支持包含$
作为扩展名的标识符。
^是一个操作符,你可以使用它来获取带有空格的字符串输入,就像这个scanf(“%[^ \ n] s,&x)...所以你只能重载它而不是定义它,因为它已经被定义了