我正在尝试使用GCC 4.7.2编译以下代码:
#include <iostream>
int foo() {
static int bar;
return [&bar] () { return bar++; } (); // lambda capturing by reference
}
int main (int argc, char* argv[]) {
std::cout << foo() << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
似乎进展不顺利,因为输出是这样的:
$p2.cpp: In function ‘int foo()’:
$p2.cpp:6:14: warning: capture of variable ‘bar’ with non-automatic storage duration [enabled by default]
$p2.cpp:4:16: note: ‘int bar’ declared here
Run Code Online (Sandbox Code Playgroud)
所以,我的第一个问题是:
这是GCC的失败,还是代码不合法C++ 11?这在GCC的最新版本中是否已修复?
我考虑使用非文字静态变量构建基于此原理的工件.此工件旨在成为shared_ptr <T>对象的工厂,当您只需要为同一实例使用重复的shared_ptr容器时,它可以避免创建新的T对象.
这个工件看起来像:
std::shared_ptr<Foo> create(std::string name) {
static std::unordered_map<std::string,std::weak_ptr<Foo>> registry;
if …Run Code Online (Sandbox Code Playgroud)