1. ホーム
  2. c++

if文の条件部分で変数を定義する?

2023-07-24 10:22:18

質問

こんなことが許されるなんて、ショックです。

if( int* x = new int( 20 ) )
{
    std::cout << *x << "!\n";
    // delete x;
}
else
{
    std::cout << *x << "!!!\n";
    // delete x;
}
// std:cout << *x; // error - x is not defined in this scope

で、これって規格で認められているのか、それともコンパイラの拡張なのか?


追伸:この件に関していくつかコメントがありましたので、お願いします。 を無視してください。 この例が "悪い" または危険であること。私は何を知っている。これは、例として、私の頭に最初に浮かんだだけです。

どのように解決するのか?

C++98以降、仕様で許可されています。

6.4節 "選択文"より。

条件中の宣言によって導入される名前(型指定子-seqによって導入されるか、条件の宣言者によって導入される)は、その宣言の時点から、条件によって制御される部分文の終わりまでスコープ内にあります。

次の例は同じセクションのものである。

if (int x = f()) {
    int x;    // ill-formed, redeclaration of x
}
else {
    int x;    // ill-formed, redeclaration of x
}