何时在 C 11 中使用大括号括起来的初始化
C 11 引入了大括号括起来的初始化语法,提供了无数的初始化选项变量。然而,语法的选择会显着影响代码的语义,尤其是在模板上下文中。为了解决这个问题,遵守一致的指导方针以确保清晰度和正确性至关重要。
指导原则:
-
确切值初始化:
- 使用复制(=)初始化为对象分配显式值,有效避免潜在的构造函数歧义。
- 如果复制初始化不可用,请考虑使用大括号初始化(如果它保持正确的语义)。否则,使用括号初始化。
-
存储值初始化:
- 利用大括号初始化来指定要存储的值列表存储在对象内,例如向量和复数中的元素。
-
描述性值初始化:
- 使用描述对象预期状态的值的括号初始化,即影响其行为而不是直接存储的参数。这包括 ifstreams 的向量(大小)和文件名的参数。
示例演示:
- 示例 1- 2:复制初始化确保初始化准确。
- 示例 3:大括号初始化适用于在字符串中存储特定数量的 'x' 个字符。
- 示例 4:大括号初始化用于初始化函数对象 (std::function)。
- 示例 5:大括号和括号初始化都适用于 std::unique_ptr。
- 示例 6-7:大括号初始化为 std::unique_ptr 提供了更简洁的语法初始化 std::locale 和 std::default_random_engine。
- 示例 8:大括号初始化是初始化持续时间对象的首选,因为它更惯用和高效。
以上是C 11 中何时应使用大括号括起来的初始化语法?的详细内容。更多信息请关注PHP中文网其他相关文章!