作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下演示程序。
#include <iostream>
int main()
{
typedef float T;
0.f.T::~T();
}
Microsoft Visual Studio Community 2019
编译。
clang
和
gcc
发出这样的错误
prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
7 | 0.f.T::~T();
| ^~~~~
( 0.f ).T::~T()
这样的表达式,则所有三个编译器都将编译该程序。
0.f.T::~T()
在语法上是否有效?如果没有,那么什么语法规则就被打破了?
最佳答案
数字标记的解析非常粗糙,并且允许许多实际上不是有效数字的事物。在C++ 98中,在[lex.ppnumber]中找到的“预处理编号”的语法是
pp-number:
digit
. digit
pp-number digit
pp-number nondigit
pp-number e sign
pp-number E sign
pp-number .
0.f.T::~T();
不是有效的数字 token ,也需要将
0.f.T :: ~ T ( ) ;
标记为
0.f.T
。
关于c++ - 为浮点常量调用伪析构函数的有效语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61278180/
我是一名优秀的程序员,十分优秀!