gpt4 book ai didi

C++ 类名作为类成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:23:03 25 4
gpt4 key购买 nike

下面代码中main中的后缀表达式AttrNode().AttrNode是什么意思? 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()

如果是虚函数就不同了,导致对指定类中函数的非虚调用,而不是最终覆盖的虚调用。该语法还可用于访问基类中隐藏在派生类中的名称。

关于C++ 类名作为类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28171708/

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