如何将C++17带初始化语句的if转换为C++14兼容代码
当然可以搞定!你这段代码用了C17才加入的if语句初始化特性——就是在if的括号里直接声明并初始化变量的写法,C14确实不支持这种语法,但转换起来非常简单,而且完全能保留原逻辑。
方案一:直接将变量声明移到if外部
这是最简洁的写法,和原代码逻辑完全一致:
CUser* user = static_cast<CUser*>(pMover); if (user && !user->UserState()) { return; }
唯一的区别是user变量的作用域变大了——原C++17代码里它只在if(以及对应的else分支)里有效,现在它会在当前代码块的剩余部分都可访问。如果这个变量之后不会再被用到,那这个方案完全够用,代码也干净。
方案二:用代码块严格控制变量作用域
要是想严格保持原代码的作用域(避免user污染外层作用域),可以加个额外的代码块把它包裹起来:
{ CUser* user = static_cast<CUser*>(pMover); if (user && !user->UserState()) { return; } }
这样user就只在这个花括号的小范围内有效,和原C++17代码的作用域效果几乎一模一样,只是多了一对括号而已,代价很小。
这两种方式都完全兼容C++14,选哪种取决于你对变量作用域的要求,逻辑上和原代码没有任何差别。
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

