我刚写了以下程序&它编译和编译运行正常。 (见现场演示here.)
#include <iostream>
typedef int T;
int main()
{
int a=3;
std::cout<<a<<'\n';
a.~T();
std::cout<<a;
return 0;
}
为什么程序编译好?
如果我没有错标量类型在C ++中没有构造函数和析构函数。那么,这个程序定义得很好吗?在这种情况下,对析构函数的显式调用是否会破坏 variable a
,否则在执行函数时它会被编译器自动销毁?我知道在生命周期结束后访问对象在C ++中有未定义的行为。但是C ++标准对此有何看法?
我在SO上发现了类似的问题here。 @Columbo给出的答案是:
你不能为标量类型调用析构函数,因为它们没有 一。该声明仅适用于您的模板代码 调用你不知道的类型的对象的析构函数 - 它 消除了为标量编写专业化的必要性(甚至是 数组)类型。
所以,我不明白他给出的解释。如果有人使用模板代码解释它会更好,在模板代码中调用析构函数的类型未知的对象。如果有人用简单的例子解释这一点,我将感激不尽。