可能未使用過

建立 [[maybe_unused]] 屬性是為了在程式碼中指示可能不使用某些邏輯。這通常與可能使用或可能不使用的前處理器條件相關聯。由於編譯器可以對未使用的變數發出警告,因此這是一種通過指示意圖來抑制它們的方法。

在生產中不需要的除錯版本中需要的變數的典型示例是指示成功的返回值。在除錯版本中,應該斷言條件,儘管在生產中這些斷言已被刪除。

[[maybe_unused]] auto mapInsertResult = configuration.emplace("LicenseInfo", stringifiedLicenseInfo);
assert(mapInsertResult.second); // We only get called during startup, so we can't be in the map

更復雜的示例是不同型別的輔助函式,它們位於未命名的名稱空間中。如果在編譯期間未使用這些函式,則編譯器可能會對它們發出警告。理想情況下,你希望使用與呼叫者相同的預處理程式標記來保護它們,儘管這可能會變得複雜,但 [[maybe_unused]] 屬性是一種更易於維護的替代方案。

namespace {
    [[maybe_unused]] std::string createWindowsConfigFilePath(const std::string &relativePath);
    // TODO: Reuse this on BSD, MAC ...
    [[maybe_unused]] std::string createLinuxConfigFilePath(const std::string &relativePath);
}

std::string createConfigFilePath(const std::string &relativePath) {
#if OS == "WINDOWS"
      return createWindowsConfigFilePath(relativePath);
#elif OS == "LINUX"
      return createLinuxConfigFilePath(relativePath);
#else
#error "OS is not yet supported"
#endif
}

有關如何使用 [[maybe_unused]] 的更詳細示例,請參閱提案