首页 新闻 搜索 专区 学院

C++请问这个代码在程序中如何起作用,原理是什么?zero后面为何会有那么多中括号小括号?

0
[待解决问题]

const int ZERO=
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
return 0;
}();

黑暗尽头的超音速炬火的主页 黑暗尽头的超音速炬火 | 菜鸟二级 | 园豆:216
提问于:2020-03-18 22:49
< >
分享
所有回答(1)
0

首先你这个程序不知道是手误还是博客园出锅,是不能编译通过的(想想也不能)。我猜测ZERO=的后面应该有"[]",这样程序就变成了:

const int ZERO = [] {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
return 0;
}();

这是一个匿名函数(lambda表达式)。也就是说在没有声明的情况下直接定义函数内容。方括号和大括号是lambda的语法结构,而后面的小括号是函数调用。这个函数的返回值是0,所以ZERO也就是0。函数体里面执行的另外两行程序是将cincout等流输入输出和printf等C标准格式化输出脱离。如果你再主程序里尝试使用freopen和cincout,会发现freopen没有起作用。这是因为在主程序之前就已经执行了lambda中的内容,所以cincout不再受到freopen控制了。

Ex_咖喱棒 | 园豆:202 (菜鸟二级) | 2020-03-19 15:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册