首页 > 解决方案 > 如何理解cpp中的++ cast表达式?

问题描述

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

float p = 3.14;
++(int)p;

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

cpp-标准草案

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

标签: c++

解决方案


++(int)p编译失败,因为(int)p不是左值。然而,这是一个语义错误,而不是句法错误。从语法上讲,它是有效的并且与++ cast-expression产生式相匹配。

++一个在语法和语义上都有效的实例是当您转换为引用时(引用是左值)。一个例子(虽然不是一个有用的例子)是:

int x = 42;
++(int&)x;

在实践中,cast-expressionin++ cast-expression很少是真正的演员。在大多数情况下,cast-expression会进一步缩减为primary-expression,允许您匹配表达式,例如++x.


推荐阅读