c++ - 如何理解cpp中的++ cast表达式?
问题描述
我对语法++ cast-expression的理解如下:
float p = 3.14;
++(int)p;
但是当我用clang编译它时,它无法编译。那么如何理解++ cast-expression及其用途呢? (int)p
是一个演员表,为什么它不起作用?
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
解决方案
++(int)p
编译失败,因为(int)p
不是左值。然而,这是一个语义错误,而不是句法错误。从语法上讲,它是有效的并且与++ cast-expression
产生式相匹配。
++
一个在语法和语义上都有效的实例是当您转换为引用时(引用是左值)。一个例子(虽然不是一个有用的例子)是:
int x = 42;
++(int&)x;
在实践中,cast-expression
in++ cast-expression
很少是真正的演员。在大多数情况下,cast-expression
会进一步缩减为primary-expression
,允许您匹配表达式,例如++x
.
推荐阅读
- git - 无需快进即可获得更改
- javascript - clearInterval() 函数不起作用,无法弄清楚为什么..?
- javascript - 使用 React-Native / JavaScript 在服务器和客户端之间同步时钟
- python - 将 python 列表插入 SQLite 单元格
- apache-spark - 为什么 getKerberosTransport 需要 3 部分 kerborse 原则?
- spring - Spring Security SAML 与 samesite=Lax 的兼容性
- php - Woo-commerce - 添加到购物车循环 - 如何将 html 添加到按钮
- spring - Spring Bean 覆盖我的 ObjectMapper 配置
- php - 连接两个表并在laravel中获取行
- flutter - 参数类型“Context”不能分配给参数类型“BuildContext”