相关疑难解决方法(0)

typedef别名的析构函数

#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)编译的.

c++ destructor typedef language-lawyer

22
推荐指数
2
解决办法
954
查看次数

标签 统计

c++ ×1

destructor ×1

language-lawyer ×1

typedef ×1