如何理解cpp中的++强制转换表达式?

时间:2020-01-07 15:03:11

标签: c++

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

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

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

cpp-std-draft

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

1 个答案:

答案 0 :(得分:5)

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

++之后进行强制转换的实例在语法和语义上都是有效的,当您强制转换为引用(引用为l值)时。一个示例(尽管不是有用的)是:

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

实际上,cast-expression中的++ cast-expression很少是实际的演员表。在大多数情况下,cast-expression将进一步缩小为primary-expression,从而使您可以匹配++x之类的表达式。