随着 C 11 的引入,开发人员获得了一组用于初始化类的新语法选项,添加到现有的语法选项中大括号括起来的初始值设定项。过多的选择提出了一个令人费解的困境:何时使用每个语法选项?
提供的指南表明,如果意图是为对象分配精确的值,复制初始化(=)应该受到青睐。这是因为它最大限度地减少了无意中调用具有潜在不同语义的显式构造函数的风险。如果复制初始化不可用,则应考虑大括号初始化,并且应将括号初始化作为最后的手段。
当使用多个旨在初始化的值时,大括号初始化表现出色存储在对象内。此语法特别适合向量、数组和复数。
当初始化期间提供的值描述对象的预期状态或行为而不是其实际数据时,应该使用括号初始化。这通常是参数指定大小或文件名的情况。
考虑以下代码片段:
{ // Example 1
int b(1); // Copy initialization for exact value
int a{1}; // Brace initialization for stored value
int c = 1; // Parentheses initialization for descriptor value (e.g., size)
int d = {1}; // Brace initialization for stored value
}
{ // Example 4
std::function a(std::plus()); // Copy initialization for callback function
std::function b{std::plus()}; // Brace initialization for callback function, likely unwanted
}
通过遵循建议的指南,开发人员可以自信地应对 C 11 初始化语法的复杂性,确保他们的代码既准确又高效。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3