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

why virtual void test()=00 is valid but virtual void test()=+0 and virtual void test()=-0 is not valid?

我搜索了一些post关于虚函数声明的内容,相信

=0

virtual void test()=0;

是固定句法所以

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 - 两个标记,=0,顺序为。

不允许使用其他令牌。接受 =00 而没有(至少)警告的编译器是不合格的。

来自标准的November 2014 working draft

10.4:

A virtual function is specified pure by using a pure-specifier (9.2) in the function declaration in the class definition.

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

pure-specifier: = 0

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

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