在LeetCode许多最优解法的代码中都会有如下代码:
static const auto io_sync_off = []()
{
// turn off sync
std::ios::sync_with_stdio(false);
// untie in/out streams
std::cin.tie(nullptr);
return nullptr;
}();
其中 std::ios::sync_with_stdio(false) 的作用是取消缓冲区同步,因为 printf()/scanf() 是C函数,而 cin/cout 是C++函数,这些函数需要用到各自的缓冲区,为了防止各自的缓冲区错位,C++默认将C函数和C++函数的缓冲区同步。当你设置成std::ios::sync_with_stdio(false)后C++就会取消同步,这会提高cin/cout的运行速度,代价是不能和printf()/scanf()混用,否则会因不同步而出现问题,所以在这种情况下整个程序切记不可将cin/cout和printf()/scanf()混用。
代码解释
如上代码属于lambda捕获的内容(《C++ Primer》P345)
C++ 11 Lambda表达式
这里需要注意一个问题,在《C++ Primer》P347中说明了如果 *lambda* 的函数体包含任何单一return语句之外的内容,且未指定返回类型,则返回void,但是以上代码依然可以通过编译