应该将 std::expected 包装成 [[nodiscard]] 吗?
在现代 C++ 编程中,std::expected 已成为处理错误和异常情况的重要组件。然而,有些人对于将 std::expected 包装成 [[nodiscard]] 是否值得一探讨。[[nodiscard]] 是一个 C++ 标记,意味着调用方应该在忽略函数返回值的情况下发出警告。对于 std::expected,将其标记为[[nodiscard]]是否有必要呢?
一方面,将 std::expected 包装成 [[nodiscard]] 可以有效地提示开发者需要对其返回值进行处理,防止忽略可能携带有错误信息的 returned monad。这样的做法可以增加代码的健壮性,减少潜在的 bug。
另一方面,有人认为将 std::expected 标记为[[nodiscard]] 会限制函数的灵活性,因为有时候我们可能会选择不处理函数的返回值,而只是想调用这个函数执行一些操作。
总的来说,是否应该将 std::expected 包装成 [[nodiscard]] 取决于具体的业务需求和编码风格。对于某些情况下需要保证代码的健壮性和错误处理的地方,标记为[[nodiscard]] 是一个不错的选择。而对于那些逻辑简单,只需执行某些操作而并不关心返回值的函数,则可以不必纠结于此。
无论是否将 std::expected 标记为[[nodiscard]],都应该根据实际情况进行权衡,选择最适合当前场景的方法。重要的是保持代码的一致性和可读性,以及对代码质量和错误处理的重视。
了解更多有趣的事情:https://blog.ds3783.com/