• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <cstdlib>

    std::_Exit

    namespace std {
      [[noreturn]] void _Exit(int status) noexcept;
    }
    

    概要

    後処理をせずに、プログラムを終了させる。

    exit()関数は、オブジェクトのデストラクタを呼び出して破棄してからプログラムを終了させるが、この関数はその破棄処理を行わずに、プログラムを終了させる。これは、リソースの破棄を、OSに任せることを意味する。

    quick_exit()との違いは、プロセス終了時に呼び出される関数を登録できない点である。

    パラメータとして渡されたstatusは、プログラムの終了コードとして使用される。

    • プログラムを正常終了させたい場合は、0もしくはEXIT_SUCCESSをパラメータstatusに設定する。
    • プログラムを異常終了させたい場合は、EXIT_FAILUREをパラメータstatusに設定する。

    効果

    • この関数を呼び出したときに生存しているオブジェクトは、破棄されない。
    • Cストリームのバッファはフラッシュされない。
    • atexit()で登録された関数は呼び出されない。
    • プロセスを終了する。

    戻り値

    この関数は決して返らない。

    備考

    この関数は、C99で導入され、C++に取り込んだものである。C++では、この関数の代わりにquick_exit()関数を使用することを推奨する。

    #include <iostream>
    #include <cstdlib>
    
    struct X {
      ~X()
      {
        std::cout << "called X's destructor" << std::endl;
      }
    };
    
    void f()
    {
      X x; // このオブジェクトのデストラクタは、呼び出されない。
      std::_Exit(0); // プログラムを正常終了させる
    }
    
    int main()
    {
      f();
    }
    

    出力

    バージョン

    言語

    • C++11

    処理系

    関連項目

    名前 説明
    exit プログラムを終了させる
    quick_exit 後処理をせずに、プログラムを終了させる

    参照