C++ while循环中是否支持类似C++17 if的声明与条件分离语法?
答案
C++20已经正式支持和if初始化语句类比的while循环初始化语法,语法格式为:while (初始化语句; 条件表达式)
你给出的示例代码本身就符合C++20的标准语法,初始化语句只会在首次进入循环前执行一次,作用域覆盖整个循环体。如果想要进一步压缩变量作用域,还可以直接把变量声明放在初始化部分,写法如下:
while (char *o = ch, *a = ch; o = strstr(o, "||"), a = strstr(a, "&&"); o != nullptr && a != nullptr) { // 循环内部逻辑 }
上述写法中o和a仅在循环内部可见,不会污染外部作用域。
如果需要兼容C17及更早的标准,可以用for循环实现完全等效的效果,所有C版本都支持该写法:
for (char *o = ch, *a = ch; o = strstr(o, "||"), a = strstr(a, "&&"), o != nullptr && a != nullptr; /* 无迭代语句 */) { // 循环内部逻辑 }
内容的提问来源于stack exchange,提问作者ZeroPhase
相关产品推荐
相关产品推荐

