为什么虚函数 virtual void test()=00 是有效的,但 virtual void test()=+0 和 virtual void test()=-0 是无效的?

4

我搜索了一些关于虚函数声明的帖子,这些帖子认为

=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;

无法编译?


1
如果 =00; 能够编译通过,请向您的编译器开发人员报告一个错误。 - T.C.
非常类似于C++11中的纯虚函数。 - Shafik Yaghmour
gcc 4.9.2 正确报告了“error: invalid pure specifier (only '= 0' is allowed) before ';' token”。 - TonyK
3个回答

4

纯虚说明符是确切的标记序列= 0——按顺序为=0的两个标记。

不允许使用其他任何标记。接受=00而没有(至少)警告的编译器是不符合规范的。


4
根据标准的2014年11月工作草案
10.4:

通过在类定义中的函数声明中使用纯虚指定符(9.2),可以指定虚函数为纯虚函数。

在9.2中,我们可以看到“纯虚指定符”的定义:

纯虚指定符: = 0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接