我通常有要检测某些条件的代码,如果存在,则处理该条件。
条件测试提取某些对处理问题的一半很重要的信息。
然而,if/else 结构不允许在 if 结构本身中声明 local-to-the-if 变量 (1)。因此,对于可以提取信息的所有各种条件,我必须在整个 if/else 链的开头放置变量声明。
例如:
else if ((EndsWithToken("d") || EndsWithToken("dsh")) &&
(p1 = find(m_input_line, '[')) &&
(p2 = find(m_input_line, ']')) &&
p2 > p1)
{
// process what we found inside of the [ ] brackets using p1 and p2...
}
此片段是 if/else 长链的一部分,其他片段不需要 p1 和 p2 - 但它们可能需要从输入流中提取的整数值,或双精度值,或两个点,或其他。 ...
关键是,我不知道将 const TCHAR * p1 和 p2 本地引入上述范围,这是唯一使用它的地方,仍然允许整体结构保持不变。
是否有一些 C++ 语言功能或可能允许这样做的模式?
(1) 正如一些人指出的那样,可以声明一个基本类型的变量,如果它是第一个变量,并且只针对非零进行测试。这太有限了,不能作为这个问题的一般解决方案有很大用处(尽管偶尔会出现有用的地方 - 但确实很少见)。