我对语法++ cast-expression的理解如下:
float p = 3.14;
++(int)p;
Run Code Online (Sandbox Code Playgroud)
但是当我用clang编译它时,它无法编译。那么如何理解++ cast-expression以及有什么用呢? (int)p是一个cast-expression为什么它不起作用?

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
++(int)p编译失败,因为(int)p不是左值。但是,这是一种语义错误,而不是语法错误。在语法上它是有效的并且与++ cast-expression生产相匹配。
++当您转换为引用(引用是左值)时,跟随一个强制转换在语法和语义上都有效的实例。一个例子(虽然不是一个有用的)是:
int x = 42;
++(int&)x;
Run Code Online (Sandbox Code Playgroud)
实际上,cast-expression输入++ cast-expression很少是实际演员表。在大多数情况下,cast-expression将进一步简化为primary-expression,允许您匹配像++x.
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |