std::optional<T>
可以初始化为脱离状态,如下所示:
std::optional<int> oi { nullopt };
但也是如此:
std::optional<int> oi { };
,同样适用于作业(oi = {}
或oi = nullopt
)。
除了个人偏好/美学意识之外,这些之间是否存在差异,这应该让我更喜欢一个?或者根本不重要?
注意:我问的是我想要显式初始化可选项的情况,而不是默认初始化它(例如强调)。
答案 0 :(得分:9)
根本没关系。选择让同事更好地理解您的代码的任何内容。
答案 1 :(得分:4)
它们都具有相同的效果 - 我更喜欢最简单的形式(KISS),但它是主观的,选择一个并保持一致。您可能还希望与代码中处理其他对象的方式保持一致,通常是否依赖于默认初始化(例如int i{}
vs int i{0}
)?
就个人而言,当我看到冗余代码时,比如明确地将对象初始化为默认值,它确实会减少我对作者的信心 - 作者是否真的明白他在做什么并试图更加安全/明确/可读,或者他只是懒得阅读文档?这让我很奇怪,作者是否理解在撰写std::vector<std::optional> v(n)
或更复杂的例子时会发生什么?如果这是一个记录在案的决定,那么一切都很好,我就能理解提高可读性的必要性。