为什么virtual void test()= 00有效但虚拟void test()= + 0和virtual void test()= - 0无效?

时间:2015-06-25 08:58:33

标签: c++ syntax

我搜索了一些关于虚函数声明的帖子,相信

=0

virtual void test()=0;

是固定的syntex所以

virtual void test()=NULL;
virtual void test()=false;
virtual void test()=1-1;
virtual void test()=0.0;

和其他声明不应该有效。

但我找到了

virtual void test()=00;
virtual void test()=000;
virtual void test()=0000;

也可以编译,为什么?

而且,我认为整数+0和-0实际上与0相同(我不确定它是否正确),就像00实际为0,为什么

virtual void test()=+0;

virtual void test()=-0;

无法编译?

3 个答案:

答案 0 :(得分:4)

pure-specifier 是精确的令牌序列= 0 - 两个令牌,=0,按此顺序排列。

不允许其他令牌。 <(1}}接受=00但没有(至少)警告的编译器是不符合的。

答案 1 :(得分:4)

来自标准的November 2014 working draft

10.4:

  

使用纯指定符(9.2)指定虚函数为pure   在类定义中的函数声明中。

在9.2中,我们看到了“纯粹说明符”的定义:

  

纯说明符:   = 0

这表明您的示例不应该像您期望的那样编译,因此您应该向编译器制造商提交错误报告。

答案 2 :(得分:0)

在我看来,这只是因为编译器(或一些预编译过程)正在用零单替换零。例如,Excel和Calc.exe将0000替换为0