C++类名作为类成员

C++ class name as class member

本文关键字:成员 C++      更新时间:2023-10-16

以下代码中AttrNode().AttrNode main的后缀表达式是什么意思?gcc 和 clang 都可以编译代码而不会出现任何错误。似乎在C++标准中是合法的。但是这样的代码是什么意思呢?为什么C++标准允许这种使用?

#include <stdio.h>
struct AttrNode {
public:
     AttrNode() {}
     static void make() {}
};
int main() {
    AttrNode().AttrNode::make();
    return 0;
}

谢谢!

AttrNode::限定了名称make,以显式调用AttrNode::make而不是任何其他称为make的函数。

在这种情况下,这是多余的; AttrNode().make()会做完全相同的事情:创建一个临时对象,调用函数,然后销毁对象。由于它是一个静态函数,因此您通常会在不创建对象的情况下调用它,AttrNode::make() .

如果它是一个虚拟函数,

则会导致对指定类中的函数进行非虚拟调用,而不是最终覆盖虚拟调用,这会有所不同。该语法还可用于访问派生类中隐藏的基类中的名称。