参考答案
结论:C++17起支持if/switch初始化器,允许在条件前声明并初始化变量,其作用域仅限控制结构内部。原理:语法扩展为if (init; cond)和switch (init; cond),编译器先执行init再判断cond;传统写法需提前定义变量导致作用域泄露,易引发命名冲突。示例:if (auto p = make(); p.valid()) { p.use(); } else { p.err(); } p仅在块内可见。该特性减少命名污染,提升代码安全性与简洁度,是现代C++推荐写法。