c++ - GCC/Clang 中这个奇怪的表达是什么?
问题描述
我最近注意到GCC/Clang中有一个奇怪的有效C/C++表达式,这是我以前从未见过的。这是C++中的示例,但类似的表达式也适用于C:
int main(){
int z = 5;
auto x = ({z > 3 ? 3 : 2;}); // <-- expression
std::cout << x;
}
它的作用是显而易见的,但我想知道它叫什么。由于它在MSVC中不值得,我猜它是一个非标准扩展。但是有什么东西也适用于MSVC吗?特别是在C中?
解决方案
它被称为语句 expr,在 GCC 中使用。你的表达({z > 3 ? 3 : 2;})
可以翻译成
if (z > 3) {x = 3;} else {x = 2;}
从文档:
括在括号中的复合语句在 GNU C 中可能显示为表达式。这允许您在表达式中使用循环、开关和局部变量。
换句话说,它提供了将复合语句置于表达式位置的能力。
相关帖子:
推荐阅读
- python - mock.MagicMock(spec=SomeClass) 和 mock.create_autospec(SomeClass) 有什么区别?
- r - 比较R中的2个字符串
- mysql - mysql 系统数据库是否应该更新其编码和排序规则?
- python - 高效地运行 Python 数据框中的行以构建交易信号
- django - 如何在不丢失表单选择多个(django)中选择的选项的情况下添加标题
- java - 用于尝试、捕获和最终用于 Scanner 和 BufferedReader 的正确方法
- javascript - 如何修改此深度合并功能以支持数组合并?
- css - 如何用另一列@media溢出网格列
- python - 如何在networkx的有向图中修改边缘标签
- javascript - Highchart 样条图,没有标记和图例标记为圆形