如何理解 cpp 中的 ++ cast 表达式?

dou*_*uyu 0 c++

我对语法++ cast-expression的理解如下:

float p = 3.14;
++(int)p;
Run Code Online (Sandbox Code Playgroud)

但是当我用clang编译它时,它无法编译。那么如何理解++ cast-expression以及有什么用呢? (int)p是一个cast-expression为什么它不起作用?

cpp-标准草案

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf

sep*_*p2k 5

++(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.