私はC++標準を読んでいるとき、次のコードは標準に従って完全に問題ないと思われます。初期化子を使用せずにスカラー型のオブジェクトのスコープにジャンプするのはどうですか?
int main() {
goto lol;
{
int x;
lol:
cout << x << endl;
}
}
// OK
[n3290:6.7/3]:それはなく、初期化と宣言をバイパス ように、ブロックに転送することが可能です。 変数がスカラー型、自明なデフォルト コンストラクタとクラスタイプを持っていない限り は、それが範囲内にあるポイントへの自動保存期間を持つ変数がスコープ内 ない点からジャンププログラムは病気形成あります些細なデストラクタ、これらの型の のいずれかのcv修飾バージョン、または上記の型のいずれかの配列があり、のない と宣言されています。
なぜ機能するのですか?その定義を飛び越して、未定義のx
を使用するのはまだ危険なのですか?そして、なぜ初期化子の存在が何か変わるべきなのでしょうか?
しかし、問題は、初期化子があるにもかかわらず、xの定義がバイパスされているためです。ではない? –
@EricZ:定義はまだ発生します。 'goto'は実行時のものですが、初期化のように実行時の動作のみをスキップします。 – GManNickG
@Gman、右!ありがとう;) –