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