Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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++ 从lambda返回捕获的引用时出现警告_C++_C++11_Lambda - Fatal编程技术网

C++ 从lambda返回捕获的引用时出现警告

C++ 从lambda返回捕获的引用时出现警告,c++,c++11,lambda,C++,C++11,Lambda,我尝试使用lambda有条件地将引用绑定到以下两个变量之一: int foo, bar; int &choice = [&]() -> int & { if (true /* some condition */) { return foo; } else { return bar; } }(); 这会在clang 3.4中产生一个警告: stack_stuffing.cpp:5:20: warning: re

我尝试使用lambda有条件地将引用绑定到以下两个变量之一:

int foo, bar;
int &choice = [&]() -> int & {
    if (true /* some condition */) {
        return foo;
    } else {
        return bar;
    }
}();
这会在clang 3.4中产生一个警告:

stack_stuffing.cpp:5:20: warning: reference to stack memory associated with
      local variable 'foo' returned [-Wreturn-stack-address]
            return foo;
                   ^~~
stack_stuffing.cpp:7:20: warning: reference to stack memory associated with
      local variable 'bar' returned [-Wreturn-stack-address]
            return bar;
                   ^~~

但我只返回对堆栈内存的引用,该内存在调用lambda的范围内。这种行为是指定的、未指定的还是叮当的错误?

这确实是叮当中的错误-您通过引用正确地捕获了这两个变量,并且没有创建悬空引用。我认为每当有人返回对任何内容(无论是lambda还是函数)中堆栈变量的引用时,Clang都会自动发出警告


Clang 3.5、.

和gcc 4.7.1没有发出警告。是否有任何特殊原因不使用
int&choice=some\u条件?foo:bar
?不过,我认为编译器不应该发出警告。@DietmarKühl是枚举上的实际代码
开关
es,我希望编译器对未处理的情况发出警告。