トップページ – Modern C++編 C++編](../../index.html) – 第8章
問題① 次のように呼び出すことができる関数 f を作成してください。
f({0, 1, 2});
実引数で、{ } を使った初期化リストを指定するには、関数の仮引数を std::initializer_list にすればよいです。
#include <initializer_list>
#include <iostream>
void f(std::initializer_list<int> lst)
{
for (int v : lst) {
std::cout << v << std::endl;
}
}
int main()
{
f({ 0, 1, 2 });
}実行結果:
0
1
2
問題② 次のコードが動作するように、MyClass を実装してください。受け取った要素は、メンバ変数の std::vector に保存するようにしてください。
int main()
{
MyClass mc = {0, 1, 2};
mc = {9, 8, 7};
}
リスト初期化を受け付けるには、仮引数が std::initializer_list のコンストラクタを定義します。初期化リストは std::initializer_list に変換されるので、結局、これがあれば代入も可能になります。
以下、実装例です。確認のため Printメンバ関数も実装しています。
#include <initializer_list>
#include <iostream>
#include <vector>
class MyClass {
public:
MyClass(std::initializer_list<int> lst) :
mElems(lst)
{
}
void Print() const
{
for (int e : mElems) {
std::cout << e << std::endl;
}
}
private:
std::vector<int> mElems;
};
int main()
{
MyClass mc = { 0, 1, 2 };
mc.Print();
mc = { 9, 8, 7 };
mc.Print();
}実行結果:
0
1
2
9
8
7
std::vector にも、仮引数が std::initializer_list のコンストラクタがあるので(第6章)、初期化リストをそのまま引き渡せます。
Programming Place Plus のトップページへ
| はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
| X で ポスト/フォロー | LINE で送る | noteで書く |
|
|
管理者情報 | プライバシーポリシー |