#include <iostream>
struct A { ~A(); };
A::~A() {
std::cout << "Destructor was called!" << std::endl;
}
typedef A AB;
int main() {
AB x;
x.AB::~AB(); // Why does this work?
x.AB::~A();
}
Run Code Online (Sandbox Code Playgroud)
上述程序的输出是:
Destructor was called!
Destructor was called!
Destructor was called!
Run Code Online (Sandbox Code Playgroud)
我假设前两行属于用户析构函数调用,而第三行是由于在退出main函数范围时调用析构函数.
根据我的理解,typedef是类型的别名.在这种情况下AB是别名A.
为什么这也适用于析构函数的名称?非常感谢对语言规范的引用.
编辑:这是在macOS High Sierra版本10.13.3上使用Apple LLVM版本9.1.0(clang-902.0.39.1)编译的.