bitand:C++ 中的关键字与函数
bitand : keyword vs function in C++
我尝试在下面的简单代码中使用替代按位运算符 'bitand'。看来我可以使用 bitand 作为关键字以及 Visual C++ 中的函数,两者都会产生不同的结果,谁能解释这种差异?
int d = 12, e = 37;
std::cout << (d & e) << std::endl; //4
std::cout << (d bitand e) << std::endl; //4
std::cout << *bitand(d, e) << std::endl; //37
int* bit_and = bitand(d, e);
std::cout << *bit_and << std::endl; //37 (should it be 4?)
尽管出现,bitand(d, e)
并未调用名为 bitand
的函数并将参数 d
和 e
传递给它。 bitand
只是 another way of spelling &
.
因此您的代码实际上与 &(d, e)
相同。 &
不是函数,逗号在这里做什么?就是lesser-knownbuilt-in comma operator。它计算并丢弃第一个参数,然后计算并 returns 第二个参数。所以 (d, e)
与 e
相同,您的代码归结为 &e
.
所以尽管代码说 bitand
,这里没有按位和发生。它充当一元 address-of operator 并返回指向 e
的指针。这就是为什么你必须用一元 *
取消引用它,以及为什么取消引用后的值是 37
而不是 4
.
顺便说一句,如果您使用 clang 或 gcc,如果您启用 -Wunused
(包含在 -Wall
中),编译器将发出警告,表明您正在丢弃一个没有效果的值,像这样:
<source>:8:26: warning: left operand of comma operator has no effect [-Wunused-value]
8 | std::cout << *bitand(d, e) << std::endl; //37
|
这会给你一个 heads-up 这不像是函数调用,而是其他东西。
bitand
是 C++ 中的关键字,等同于具有相同行为的 operator &
,根据使用上下文采用单个或两个参数。
*bitand(d, e)
等同于
*&(d, e)
括号中逗号运算符的结果是对最后一个变量的引用
*&e
获取变量的地址并取消引用显然 returns 变量值。
我尝试在下面的简单代码中使用替代按位运算符 'bitand'。看来我可以使用 bitand 作为关键字以及 Visual C++ 中的函数,两者都会产生不同的结果,谁能解释这种差异?
int d = 12, e = 37;
std::cout << (d & e) << std::endl; //4
std::cout << (d bitand e) << std::endl; //4
std::cout << *bitand(d, e) << std::endl; //37
int* bit_and = bitand(d, e);
std::cout << *bit_and << std::endl; //37 (should it be 4?)
尽管出现,bitand(d, e)
并未调用名为 bitand
的函数并将参数 d
和 e
传递给它。 bitand
只是 another way of spelling &
.
因此您的代码实际上与 &(d, e)
相同。 &
不是函数,逗号在这里做什么?就是lesser-knownbuilt-in comma operator。它计算并丢弃第一个参数,然后计算并 returns 第二个参数。所以 (d, e)
与 e
相同,您的代码归结为 &e
.
所以尽管代码说 bitand
,这里没有按位和发生。它充当一元 address-of operator 并返回指向 e
的指针。这就是为什么你必须用一元 *
取消引用它,以及为什么取消引用后的值是 37
而不是 4
.
顺便说一句,如果您使用 clang 或 gcc,如果您启用 -Wunused
(包含在 -Wall
中),编译器将发出警告,表明您正在丢弃一个没有效果的值,像这样:
<source>:8:26: warning: left operand of comma operator has no effect [-Wunused-value]
8 | std::cout << *bitand(d, e) << std::endl; //37
|
这会给你一个 heads-up 这不像是函数调用,而是其他东西。
bitand
是 C++ 中的关键字,等同于具有相同行为的 operator &
,根据使用上下文采用单个或两个参数。
*bitand(d, e)
等同于
*&(d, e)
括号中逗号运算符的结果是对最后一个变量的引用
*&e
获取变量的地址并取消引用显然 returns 变量值。