c++ - 析构函数不应该用指针声明吗?在 C++ 中

标签 c++ destructor declaration c++11

在 C++0x -n3290 草案中:他们在 section :Destructors 中添加了:12.4/2nd point last line

          **A destructor shall not be declared with a ref-qualifier.**

在 c++03 草案中....他们没有在析构函数中提到这一点?

我的问题是

   *~S() ;   //this declaration is allowed or not according to the Standard's
   //**~S(); ***~S() ; etc...........

允许这种类型的声明吗? 他没有在草案的任何地方描述这个......声明?

在 GCC 4.6.0,Sun/Oracle C++12.0 , --->允许这个声明 int Comeau C/C++ -->不允许

最佳答案

这看起来不像是任何类型的合法函数声明,更不用说析构函数了。我不确定标准的那一部分在谈论什么,但我有一个猜测。

我怀疑有一个限定符说你的函数是在右值引用上调用的。像这样:

class A {
 public:
   void IAmAnRValue() &&;
};

我认为标准中的语言是说在析构函数中不允许使用此限定符,就像尾随 const 也是非法的一样。

而且,经过进一步调查,我对自己推测正确性的确定性大大提高。这是理由:

它清楚地指出函数现在可以在“cv-qualifer”之后有一个“ref-qualifier”。这意味着函数声明现在可以跟在 const &const volatile && 之后,而不仅仅是 const。使用的术语(ref-qualifier)与您引用的标准中使用的术语相同。析构函数不能拥有析构函数是有道理的。

关于c++ - 析构函数不应该用指针声明吗?在 C++ 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7329617/

相关文章:

JavaScript 将变量声明为 "g = g || {}; "这意味着什么?

c - 为什么我们不能在结构中声明函数?

在 std::array 中使用默认参数调用 C++ 函数?

c++ - 使用指向对象的指针显式调用析构函数

Python 文件对象、关闭和析构函数

c++ - C++中的销毁顺序

c++ - 用于 C 密码学的快速伪随机数生成器

c++ - uint8_t、uint16_t、...的格式说明符?

c++ - 如何在 2 个不同的共享库中调用具有相同符号的函数?

javascript - 为什么在回调中声明一个 var 会取消定义参数? (吊装)