为什么 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
。
我搜索了一些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
。