gpt4 book ai didi

c++ - 位和 : keyword vs function in C++

转载 作者:行者123 更新时间:2023-12-05 03:26:51 25 4
gpt4 key购买 nike

我尝试在下面的简单代码中使用替代按位运算符“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电子bitand 就是 another way of spelling &

因此您的代码实际上与&(d, e) 相同。 & 不是函数,逗号在这里做什么?这是鲜为人知的built-in comma operator .它计算并丢弃第一个参数,然后计算并返回第二个参数。所以 (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
|

这会提醒您这不像是函数调用,而是其他东西。

关于c++ - 位和 : keyword vs function in C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71629571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com