在 if condition 定義的變數,以下 else 皆可見。

int main()
{
   if(int* i = nullptr)
   {
     int* k = nullptr;
   }
   else if(int* j = nullptr)
   {
       std::cout << *i << std::endl;
       std::cout << *k << std::endl; // only compile error for k.
   }
   else
   {
       std::cout << *j << std::endl;
   }
   return 0;
}

Defined in if condition: int* i

你以為當 i 被定義在 第一個的 if 中,在 else if 中就不會意外地用到嗎?

錯了!

else if 的 block 中對於其 i 還是可見。只要你不小心打錯了,compiler 不會跟你報錯!! 另外在 else 中的 block 也是可以見到 else if condition 中的 j。跟我原本的認知: i 應該只在 if 中, j 只在 else if 中很不一樣。

Defined in if block: int* k

這個現象只有在 condition 裡會有,如果真的是在 if block 中定義的 k,在 else if 就真的看不見了。所以當你想在 condition 中定義一個值的時候,對於他的生命週期,還是要多多注意。

demo: http://codepad.org/ZPF4LvA9

comments powered by Disqus