不允许在c++中使用#define ^

#define ^ in c++ is not allowed

本文关键字:#define c++ 不允许      更新时间:2023-10-16

我不能像#define ^ +那样使用#define来给^赋予单独的含义。但是,正如我能够用#define赋予$意义一样,就像#define $ +一样。

你能告诉我$^有什么不同吗
在c++标准的哪个规则上不允许使用此^

我使用的是VC++2012,没有尝试过GCC或任何其他工具。

^是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

预处理器宏名称的规则与标识符的规则相同:它们只能包含大小写字母、下划线和数字。标识符中的第一个字符不能是数字。

这意味着不可能使用#define来重新定义像^这样的运算符的含义。

在标准C++中,这也排除了包含$的标识符。但是,有些编译器支持将$作为扩展名的标识符。

^是一个运算符,您可以使用它来获得带有空格的字符串的输入,如scanf("%[^\n]s,&x)…所以您只能重载它,而不能定义它,因为它已经被定义为