C++ 面试题 目录

C++11 中 initializer_list 的用法?

推荐答案

-- -------------------- ---- -------
-------- ----------
-------- ------------------

----- ------- -
-------
    ---------------------------------- ----- -
        --- ----- ---- - ----- -
            --------- -- ---- -- - --
        -
        --------- -- ----------
    -
--

--- ------ -
    ------- --- - --- -- -- -- ---  -- -- ---------------- -----
    ------ --
-

本题详细解读

1. initializer_list 的引入

C++11 引入了 std::initializer_list,它是一个轻量级的容器类模板,用于表示一个初始化列表。initializer_list 通常用于构造函数或函数的参数,以便能够接受一个花括号 {} 包围的初始化列表。

2. initializer_list 的基本用法

initializer_list 可以用于初始化对象或传递给函数。以下是一些常见的用法:

2.1 构造函数中使用 initializer_list

-- -------------------- ---- -------
----- ------- -
-------
    ---------------------------------- ----- -
        --- ----- ---- - ----- -
            --------- -- ---- -- - --
        -
        --------- -- ----------
    -
--

在这个例子中,MyClass 的构造函数接受一个 std::initializer_list<int> 参数,并使用它来初始化对象。

2.2 函数中使用 initializer_list

-- -------------------- ---- -------
---- ------------------------------------ ----- -
    --- ----- ---- - ----- -
        --------- -- ---- -- - --
    -
    --------- -- ----------
-

--- ------ -
    ------------- -- -- -- ----  -- -- ---------------- ----
    ------ --
-

在这个例子中,printList 函数接受一个 std::initializer_list<int> 参数,并打印列表中的元素。

3. initializer_list 的特点

  • 不可修改initializer_list 中的元素是只读的,不能通过 initializer_list 修改元素的值。
  • 轻量级initializer_list 是一个轻量级的容器,它不拥有元素的内存,只是对元素的引用。
  • 自动推导:在使用花括号 {} 初始化时,编译器会自动推导出 initializer_list 的类型。

4. 注意事项

  • initializer_list 的生命周期:initializer_list 的生命周期与它所引用的初始化列表的生命周期相同。如果初始化列表是临时的,那么 initializer_list 的生命周期也是临时的。
  • 避免滥用:虽然 initializer_list 很方便,但不应滥用。对于复杂的初始化逻辑,建议使用其他方式。

通过以上内容,你应该能够理解并掌握 std::initializer_list 在 C++11 中的基本用法和特点。

纠错
反馈