我对语法 ++ cast-expression 的理解如下:
float p = 3.14;
++(int)p;
但是当我用clang编译时,它无法编译。那么如何理解 ++ cast-expression 呢? (int)p
是 cast-expression ,为什么它不起作用?
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
答案 0 :(得分:5)
++(int)p
无法编译,因为(int)p
不是l值。但是,这是一个语义错误,而不是语法错误。从语法上讲,它是有效的,并且与++ cast-expression
的产生匹配。
在++
之后进行强制转换的实例在语法和语义上都是有效的,当您强制转换为引用(引用为l值)时。一个示例(尽管不是有用的)是:
int x = 42;
++(int&)x;
实际上,cast-expression
中的++ cast-expression
很少是实际的演员表。在大多数情况下,cast-expression
将进一步缩小为primary-expression
,从而使您可以匹配++x
之类的表达式。