我在函数内部有一个 lambda,该函数使用 lambda 内部的[&]
局部静态变量进行捕获,然后使用该变量。我不确定这是否有效,但这可以很好地编译和链接:
void Foo()
{
static int i = 5;
auto bar = [&]()
{
i++;
};
bar();
}
int main()
{
Foo();
}
但是通过制作Foo
模板函数:
template <typename T>
void Foo()
{
static int i = 5;
auto bar = [&]()
{
i++;
};
bar();
}
int main()
{
Foo<int>();
}
我收到以下错误:
g++-4.7 -std=c++11 main.cpp
/tmp/cctjnzIT.o:在函数'void Foo()::{lambda()#1}::operator()() const'中:
main.cpp: (.text+0x1a): 未定义引用'i'
main.cpp:(.text+0x23): 未定义引用'i'
collect2: 错误: ld 返回 1 退出状态
所以,我有两个问题:
i
在第一个示例中使用甚至是有效的 c++ 吗?- 如果#1,那么第二个例子有什么问题?或者这是一个 gcc 错误?