我搜索了一些关于虚函数声明的帖子,相信
=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;
无法编译?
答案 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
。