gpt4 book ai didi

c++ - 捕获的变量隐藏了 lambda 中传递的变量。如何取消隐藏?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:37 27 4
gpt4 key购买 nike

考虑这个例子:

int main()
{
int a = 100;
std::cout<<[=,&a](int a,int b){return a+b;}(99,1);
return 0;
}

输出是 101 而不是我期望的 100

我不能这样指定 [&a,=] 因为它会出错。

如何避免名称隐藏并引用参数。我知道更改名称是一种选择,但我很好奇。引用标准也会有帮助

编辑:我正在使用 gcc 4.7.1

编辑:

这是显示演示的 ideone 链接。我在那里使用了 C++ 4.7.2 编译器
ideone

最佳答案

我在标准中找不到任何与 lambda 相关的内容,表明您的结果是预期的行为。我同意 Andy 的评论,即这是 GCC 中的错误。 Linux 上的 GCC 4.7.2、MinGW 的 GCC 4.7.2 和 MinGW 的 GCC 4.8.0 产生与问题中相同的结果,但 VC++10 和 VC++11 产生预期的结果。

你应该考虑filing a bug report

关于c++ - 捕获的变量隐藏了 lambda 中传递的变量。如何取消隐藏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16798079/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com