nodiscard

Version >= C++ 17

[[nodiscard]] 属性可用于指示在执行函数调用时不应忽略函数的返回值。如果忽略返回值,编译器应对此发出警告。该属性可以添加到:

  • 功能定义
  • 一种

将属性添加到类型与将属性添加到返回此类型的每个函数具有相同的行为。

template<typename Function>
[[nodiscard]] Finally<std::decay_t<Function>> onExit(Function &&f);

void f(int &i) {
    assert(i == 0);                    // Just to make comments clear!
    ++i;                               // i == 1
    auto exit1 = onExit([&i]{ --i; }); // Reduce by 1 on exiting f()
    ++i;                               // i == 2
    onExit([&i]{ --i; });              // BUG: Reducing by 1 directly
                                       //      Compiler warning expected
    std::cout << i << std::end;        // Expected: 2, Real: 1
}

有关如何使用 [[nodiscard]] 的更详细示例,请参阅提案

注意: 示例中省略了 Finally / onExit 的实现细节,请参见 Finally / ScopeExit