可能未使用过

创建 [[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]] 的更详细示例,请参阅提案