【发布时间】:2018-03-07 20:50:37
【问题描述】:
下面的程序...
int main()
{
int{1}.~int();
}
无法在 上编译(请参阅 conformance viewer):
clang++ 主干,带有
-std=c++1zg++ 主干,带
-std=c++1zCL 19 2017
为int引入一个类型别名...
int main()
{
using X = int;
int{1}.~X();
}
...使程序在所有前面提到的编译器上都有效,没有警告(参见conformance viewer)。
为什么在调用int 的析构函数时需要类型别名?这是因为int 不是用于销毁调用的有效语法元素吗?
【问题讨论】:
-
为什么要调用 int 析构函数?
-
@manni66:这在通用上下文中是有意义的(例如实现
std::optional),但这个问题纯粹是出于好奇而提出的。 -
好像有人在看C++ WAT。
-
我很确定
t.~T()在模板中工作,处理通用上下文。不能说我能想到我想直接使用int的情况。 -
我标记为重复,因为哥伦布在他的回答中指出了这一点。 “您实际上不能为标量调用析构函数,因为它们没有析构函数(参见 §12.4)。该语句仅允许用于调用不知道类型的对象的析构函数的模板代码 -它消除了为标量类型编写专业化的必要性。” -- 我应该注意,为了准确起见,应该用 [class.dtor] 替换 12.4。
标签: c++ language-lawyer destructor c++17 primitive-types