C++ 从lambda返回捕获的引用时出现警告
我尝试使用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
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,我希望编译器对未处理的情况发出警告。