最終更新日時: 2024年09月03日 15時17分49秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<ios>

# std::ios_base::コンストラクタ

    protected:
      ios_base();                               // (1)
    private:
      ios_base(const ios_base&);                // (2) 宣言のみ、C++03 まで
    public:
      ios_base(const ios_base&) = delete;       // (2) C++11 から

## 概要

オブジェクトを構築する。

## 効果

- (1) デフォルトコンストラクタ。
  構築が完了した時点では、本オブジェクトの各メンバの値は不定である。
  本オブジェクトの各メンバは、初めて使用する時かデストラクタが呼ばれる時のいずれか早い方の前までに `basic_ios::init` を呼び出して初期化しなければならない。
  さもなければ、未定義動作を引き起こす。
- (2) コピーコンストラクタ。コピー構築不可。
  `ios_base` オブジェクトをコピー構築することはできない。

## 備考

- コンストラクタが `protected` であることからも分かるとおり、`ios_base` は直接使用するのではなく継承されることを想定している。
  通常は、`ios_base`、あるいは、その直接の派生クラスである `basic_ios` を直接継承するのではなく、`basic_istream`、`basic_ostream`、`basic_iostream` のいずれかを継承することになるだろう。
- コピーコンストラクタは、
  - C++03 : アクセス指定子`private`で宣言のみされ、定義はされない
  - C++11 : アクセス指定子`public`で`delete`定義される （いずれにせよコピーすることはできないが、`public` で `delete` の方が誤ってコピーしようとした際のエラーメッセージが分かりやすいため、変更されている）
- コピーコンストラクタが宣言されているため、ムーブコンストラクタも自動生成されない。

## バージョン

## 言語

- C++98

### 処理系

- Clang: 3.0 ✅, 3.1 ✅, 3.2 ✅, 3.3 ✅, 3.4 ✅, 3.5.0 ✅, 3.6.0 ✅, 3.7.0 ✅, 3.8.0 ✅
- GCC: 4.3.6 ✅, 4.4.7 ✅, 4.5.4 ✅, 4.6.4 ✅, 4.7.3 ✅, 4.8.1 ✅, 4.8.2 ✅, 4.9.0 ✅, 4.9.1 ✅, 4.9.2 ✅, 5.1.0 ✅, 5.2.0 ✅, 6.0.0 ✅
- ICC: ??
- Visual C++: ??

## 参照

- `ios_base::~ios_base`
- `basic_ios`
- `basic_ios::basic_ios`
- `basic_ios::init`