C++中and/bitand用于成员函数限定符:是规范疏漏还是编译器Bug?
这既不是C++标准的疏漏,也不是编译器Bug
核心原因:替代关键字的合法使用
and和bitand是C++标准明文规定的替代关键字,分别等价于&&和&——这是标准为兼容特殊键盘环境(无法输入&类符号)设计的语法,完全合法,并非编译器私有的扩展行为。
代码的实际含义
你看到的代码本质是C++11引入的成员函数引用限定符的另类写法:
void f() and等价于void f() &&:这是右值引用限定的成员函数,仅能被右值对象(比如临时对象C{})调用void f() bitand等价于void f() &:这是左值引用限定的成员函数,仅能被左值对象(比如具名变量c)调用
所以运行时:
C{}.f()会触发右值版本,输出f() andc.f()会触发左值版本,输出f() bitand
等价的常规写法
把替代关键字换成常规符号后,代码的逻辑会更直观:
#include <iostream> class C { public: void f() && { std::cout << " f() and\n"; } void f() & { std::cout << " f() bitand\n"; } }; int main() { C{}.f(); C c; c.f(); }
内容的提问来源于stack exchange,提问作者Thomas W.
相关产品推荐
相关产品推荐

