Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么捕获列表中的[[可能未使用]]不可能?_C++_C++17 - Fatal编程技术网

C++ 为什么捕获列表中的[[可能未使用]]不可能?

C++ 为什么捕获列表中的[[可能未使用]]不可能?,c++,c++17,C++,C++17,我想知道为什么我不能在lambda的捕获列表中使用[[maybe_unused]]属性。捕获列表的变量不能标记为[[可能未使用]]有什么原因吗?这将避免在以下情况下捕获所有变量,即[&]: auto lambda = [&x, [[maybe_unused]] &y](){ if constexpr( x >= 0) { return x; } else { return y; } } 在x>=0的每种情况

我想知道为什么我不能在lambda的捕获列表中使用[[maybe_unused]]属性。捕获列表的变量不能标记为[[可能未使用]]有什么原因吗?这将避免在以下情况下捕获所有变量,即[&]:

auto lambda = [&x, [[maybe_unused]] &y](){ 
    if constexpr( x >= 0) {
        return x;
    }
    else {
        return y;
    }
}
在x>=0的每种情况下,都有一个编译器警告未使用y。但如果x<0,则没有警告。我的第一次尝试是使用[[可能未使用]],但这是不可能的


我的问题:有什么原因,为什么我不能在lambda的捕获列表中使用[[maybe_unused]]属性?

我在邮件列表中也问了同样的问题。结果是:

啊,是的,那将是一个[[可能未使用的]]可能适用的地方。 然而,就目前而言,您可以轻松地编写

(void)a;
要取消显示警告,请执行以下操作: 代码混乱(因此更易于阅读和维护),并且 在现有编译器中工作(因此更易于部署)

“是的,但是用这种逻辑,[[可能没有使用]]不是完全正确的吗 多余的和不必要的,永远不应该被标准化?” 好的,是的


它无法避免捕获,该属性仅用于消除编译器对未使用变量的警告。@super这就是重点。在x>=0的每种情况下,都有一个编译器警告未使用y。我喜欢用可能未使用的来消除警告。您可以使用默认捕获。只要做
[&](){…},它将只捕获您使用的内容。如果您希望尽可能显式,可以将默认捕获与其他显式捕获相结合<代码>[&,&x](){…}例如。根据实际代码的上下文,您可能希望将其翻过来。使用帮助函数或条件运算符执行以下操作:如果x>=0,则返回捕获并返回x的lambda,否则返回捕获并返回y的lambda。此外,问题中的示例是clang warning-Wunused lambda capture中的错误。请看正确的。我也遇到了同样的错误,这在之前的几封邮件中已经讨论过了。为了回答这个问题,我只引用了(在某种程度上)解释了为什么没有
可能没有使用过的
,甚至在这个bug之外。