以下代码中AttrNode().AttrNode
中后缀表达式main
的含义是什么? gcc和clang都可以编译代码而不会出现任何错误。似乎它在C ++标准中是合法的。但这些代码的含义是什么?为什么C ++标准允许这样的使用?
#include <stdio.h>
struct AttrNode {
public:
AttrNode() {}
static void make() {}
};
int main() {
AttrNode().AttrNode::make();
return 0;
}
谢谢!
答案 0 :(得分:8)
AttrNode::
符合名称make
,明确调用AttrNode::make
,而不是任何其他名为make
的函数。
在这种情况下,这是多余的; AttrNode().make()
会做同样的事情:创建一个临时对象,调用该函数,然后销毁该对象。因为它是一个静态函数,所以通常在不创建对象的情况下调用它,AttrNode::make()
。
如果它是一个虚函数,会导致对指定类中的函数进行非虚拟调用,而不是虚拟调用最终覆盖,这会有所不同。该语法还可用于访问基类中已隐藏在派生类中的名称。