[2026] C++ std::initializer_list | Brace Lists for Functions and Containers

[2026] C++ std::initializer_list | Brace Lists for Functions and Containers

이 글의 핵심

std::initializer_list (C++11) is a lightweight view over a brace-enclosed list. Used for container init and variadic-like APIs—not a full container; watch lifetime and vector ctor ambiguity.

What is std::initializer_list?

std::initializer_list is a standard type (C++11) representing values from a brace-enclosed list {a,b,c}. It is widely used for container initialization and function parameters that want a variable number of same-type arguments. 아래 코드는 cpp를 사용한 구현 예제입니다. 필요한 모듈을 import하고, 반복문으로 데이터를 처리합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

#include <initializer_list>
#include <vector>
// 실행 예제
void print(std::initializer_list<int> list) {
    for (int x : list) {
        std::cout << x << " ";
    }
    std::cout << std::endl;
}
int main() {
    print({1, 2, 3, 4, 5});
}

Why it matters:

  • Variadic-like call sites without variadic templates
  • Type safety for homogeneous lists
  • STL integration—containers support it

Container initialization

아래 코드는 cpp를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2{1, 2, 3, 4, 5};
std::map<std::string, int> m = {
    {"Alice", 90},
    {"Bob", 85}
};
std::set<int> s = {1, 2, 3, 4, 5};

Custom class

아래 코드는 cpp를 사용한 구현 예제입니다. 클래스를 정의하여 데이터와 기능을 캡슐화하며, 반복문으로 데이터를 처리합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

class MyVector {
    std::vector<int> data;
public:
    MyVector(std::initializer_list<int> list) : data(list) {}
    void print() const {
        for (int x : data) std::cout << x << " ";
        std::cout << std::endl;
    }
};
int main() {
    MyVector v = {1, 2, 3, 4, 5};
    v.print();
}

Examples

Sum / stats

아래 코드는 cpp를 사용한 구현 예제입니다. 반복문으로 데이터를 처리합니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

int sum(std::initializer_list<int> list) {
    int total = 0;
    for (int x : list) total += x;
    return total;
}

2D matrix helper

아래 코드는 cpp를 사용한 구현 예제입니다. 클래스를 정의하여 데이터와 기능을 캡슐화하며, 반복문으로 데이터를 처리합니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

class Matrix {
    std::vector<std::vector<int>> data;
public:
    Matrix(std::initializer_list<std::initializer_list<int>> rows) {
        for (const auto& row : rows) {
            data.emplace_back(row);
        }
    }
};

Braces vs parentheses (vector)

아래 코드는 cpp를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

std::vector<int> v1{10};   // one element: 10
std::vector<int> v2(10);   // size 10
std::vector<int> v3{10, 20};  // two elements
std::vector<int> v4(10, 20);  // size 10, fill 20

Narrowing

int x = 3.14;   // allowed (warning)
// int y{3.14}; // error in list context
int y{static_cast<int>(3.14)};

Most Vexing Parse

Widget w{};   // object
// Widget w();  // function declaration

Implementation model (conceptual)

initializer_list holds begin pointer + size to a compiler-generated const array. Copying the initializer_list object is cheap and may alias the same storage. Lifetime: the backing array lives until the end of the full-expression containing the list—do not return a initializer_list pointing at stale storage; return a vector (or similar) instead.

Patterns

Builder

아래 코드는 cpp를 사용한 구현 예제입니다. 클래스를 정의하여 데이터와 기능을 캡슐화하며, 반복문으로 데이터를 처리합니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

class QueryBuilder {
    std::vector<std::string> conditions_;
public:
    QueryBuilder& where(std::initializer_list<std::string> conditions) {
        for (const auto& c : conditions) conditions_.push_back(c);
        return *this;
    }
};

makeSet

다음은 간단한 cpp 코드 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

template<typename T>
std::set<T> makeSet(std::initializer_list<T> list) {
    return std::set<T>(list);
}

FAQ

Q1: When to use?
A: Homogeneous variable-length lists at the call site; container initialization. Q2: Modify elements?
A: No—elements are const in the view; copy to vector to mutate. Q3: Empty list?
A: Pass {}. Resources: cppreference — std::initializer_list, Effective Modern C++ Item 7. Related: List initialization, Uniform initialization. One line: initializer_list is the standard way to pass {...} lists—a small read-only view, not a growable container.

Keywords

C++, initializer_list, braced initialization, C++11, STL.

... 996 lines not shown ... Token usage: 63706/1000000; 936294 remaining Start-Sleep -Seconds 3