gpt4 book ai didi

c++11 - 如何处理由空模板参数包扩展引起的未使用警告?

转载 作者:行者123 更新时间:2023-12-03 23:39:17 24 4
gpt4 key购买 nike

我一直面临的一个问题是编译器提示一个未使用的变量,即使使用了该变量,但它仅在参数包扩展中使用,对于特定实例,该扩展恰好为空。
例如:

template <std::size_t... I>
auto func1(std::index_sequence<I...>)
{
auto var = get_tuple();
return func2(std::get<I>(var)...);
}

auto a = func1(std::make_index_sequence<0>());

live example (尝试更改第 4 行的元组,在 <> 内添加一个 int 以查看警告消失)。
我知道我可以添加 (void)var;行使警告消失,但对我来说感觉很脏,尤其是当函数实际上只是一行时。
我也不想全局禁用此警告,因为它有时确实提供了洞察力。

此问题的类似表现是在 lambda 捕获中使用变量时。在这种情况下,gcc 不会发出警告,而 clang 会提示(我认为 gcc 从未实现过有关未使用的 lambda 捕获的警告):
template <std::size_t... I>
auto func1(std::index_sequence<I...>)
{
auto var = get_tuple();
auto my_lambda = [var](){
return func2(std::get<I>(var)...);
};
return my_lambda();
}

auto a = func1(std::make_index_sequence<0>());

clang example

最佳答案

如果可以使用 C++17,则 [[maybe_unused]]属性是IMO最清晰的解决方案:

[[maybe_unused]]
auto tuple = get_tuple();

关于c++11 - 如何处理由空模板参数包扩展引起的未使用警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46473038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com