显式初始化 std::optional 时,我应该使用 nullopt 吗?
When explicitly initializing std::optional's, should I use nullopt?
一个std::optional<T>
可以像这样初始化为脱离状态:
std::optional<int> oi { nullopt };
也喜欢这样:
std::optional<int> oi { };
赋值也是如此(oi = {}
或 oi = nullopt
)。
除了个人喜好/审美之外,这两者之间是否存在差异,使我更喜欢其中之一?还是根本不重要?
注意:我问的是我想显式初始化可选的情况,而不是默认初始化它(例如为了强调)。
完全没关系。选择能让您的同事更好地理解您的代码的内容。
它们都有相同的效果 - 我更喜欢最简单的形式 (KISS),但它是主观的,选择一个并保持一致。您可能还希望与代码中处理其他对象的方式保持一致,您通常依赖默认初始化吗(例如 int i{}
与 int i{0}
)?
就我个人而言,当我看到冗余代码时,例如将对象显式初始化为其默认值,它确实会稍微降低我对作者的信心 - 作者是否真的理解他在做什么并试图更加安全/ 明确的 / 可读的,或者他只是懒得阅读文档?这让我想知道,作者是否理解他写 std::vector<std::optional> v(n)
或更复杂的例子时会发生什么?如果这是一个记录在案的决定,采用编码风格,那么一切都很好,我可以理解需要提高可读性。
一个std::optional<T>
可以像这样初始化为脱离状态:
std::optional<int> oi { nullopt };
也喜欢这样:
std::optional<int> oi { };
赋值也是如此(oi = {}
或 oi = nullopt
)。
除了个人喜好/审美之外,这两者之间是否存在差异,使我更喜欢其中之一?还是根本不重要?
注意:我问的是我想显式初始化可选的情况,而不是默认初始化它(例如为了强调)。
完全没关系。选择能让您的同事更好地理解您的代码的内容。
它们都有相同的效果 - 我更喜欢最简单的形式 (KISS),但它是主观的,选择一个并保持一致。您可能还希望与代码中处理其他对象的方式保持一致,您通常依赖默认初始化吗(例如 int i{}
与 int i{0}
)?
就我个人而言,当我看到冗余代码时,例如将对象显式初始化为其默认值,它确实会稍微降低我对作者的信心 - 作者是否真的理解他在做什么并试图更加安全/ 明确的 / 可读的,或者他只是懒得阅读文档?这让我想知道,作者是否理解他写 std::vector<std::optional> v(n)
或更复杂的例子时会发生什么?如果这是一个记录在案的决定,采用编码风格,那么一切都很好,我可以理解需要提高可读性。