「std::initializer list」の版間の差分
提供: C++入門
(ページの作成:「std::initializer_list とは、C++11で追加されたクラスで初期化リストを扱うための機能を提供します。 '''読み方''' ;[[std::i...」) |
(相違点なし)
|
2013年11月2日 (土) 23:20時点における版
std::initializer_list とは、C++11で追加されたクラスで初期化リストを扱うための機能を提供します。
読み方
- std::initializer_list
- えすてぃーでぃー いにしゃらいざー りすと
目次
概要
配列や構造体は、初期化リストを扱えました。
int a[] = {1,2,3}; struct Foo {int i; int j;}; Foo foo = { 123, 456 };
しかしながら、クラスでは、上記のような構文で初期化できませんでした。 C++11では、クラスでも初期化リストを扱えるように、std::initializer_listを追加しました。
コンパイラ
- clang++ 3.3 では、使用できません。
- gcc49 を使用しました。
ヘッダファイル
#include <initializer_list>
initializer_list1.cpp の例
コンストラクタで初期化リストを受け取り、std::vectorに入れる例です。std::vectorには、従来通りの方法で入れています。
ソースコード initializer_list1.cpp
#include <iostream> #include <vector> #include <initializer_list> using namespace std; class C { vector<int> v; public: C (std::initializer_list<int> list) { for (auto it: list) { v.push_back(it); } } friend std::ostream& operator<<(std::ostream& os, const C& c) { for (auto it: c.v) { os << it << " "; } return os; } }; int main(int argc, char const* argv[]) { C c = {1,2,3}; cout << c << endl; return 0; }
コンパイル
g++49 -std=c++11 initializer_list1.cpp -o initializer_list1
実行例
% ./initializer_list1 1 2 3