我们总是这样声明一个纯虚函数:
virtual void fun () = 0 ;
也就是说,它总是赋值为0。
我所理解的是,这是将此函数的vtable条目初始化为NULL,而此处的任何其他值都会导致编译时错误。这种理解是正确还是错误的?
发布于 2010-01-29 01:57:03
C++标准的9.2节给出了类成员的语法。它包括这样的产品:
pure-specifier:
= 0
值并没有什么特别之处。"= 0“只是表示”这个函数是纯虚拟的“的语法。它与初始化或空指针或数值零无关,尽管与这些东西的相似性可能具有助记值。
发布于 2010-01-29 01:52:28
我不确定这背后是否有什么意义。这只是语言的语法。
发布于 2010-01-29 01:57:11
C++一直避免引入新的关键字,因为新的保留字打破了使用这些字作为标识符的旧程序。它通常被视为该语言的优势之一,它尽可能地尊重旧代码。
可能确实选择了= 0
语法,因为它类似于将vtable条目设置为0
,但这纯粹是象征性的。(大多数编译器将这样的vtable条目分配给存根,存根在中止程序之前会发出错误。)之所以选择语法,主要是因为它以前没有用于任何用途,而且它省去了引入新关键字的麻烦。
https://stackoverflow.com/questions/2156634
复制相似问题