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

问题描述 投票:1回答:3

我无法使用^#define赋予单独的含义,例如#define ^ +。但正如我能够使用$#define赋予意义,就像#define $ +一样。

你能不能让我知道$^有何不同? 关于c ++标准的规则,这个^是不允许的?

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

c++ preprocessor
3个回答
4
投票

^是C ++中的运算符。这是一个按位异或。请阅读https://www.tutorialspoint.com/cplusplus/cpp_operators.htm

操作员不能以这种方式“重新定义”,您需要重载它们。 C ++允许您为同一范围内的函数名称或运算符指定多个定义,分别称为函数重载和运算符重载(https://www.tutorialspoint.com/cplusplus/cpp_overloading.htmhttps://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


3
投票

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

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

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


-2
投票

^是一个操作符,你可以使用它来获取带有空格的字符串输入,就像这个scanf(“%[^ \ n] s,&x)...所以你只能重载它而不是定义它,因为它已经被定义了

© www.soinside.com 2019 - 2024. All rights reserved.