作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
下面代码中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/
我是一名优秀的程序员,十分优秀!