小编kes*_*vic的帖子

Lambda 表达式到达范围

在学校的面向对象编程课上,我们学习了C++中的Lambda表达式,教授明确表示捕获Lambda表达式内变量的到达范围只是最内层的封装范围。

考虑到讲座,我的结论是下面的代码不应该起作用,因为变量b和c是在 lambda 自身范围的最内部封装范围之外定义的。不幸的是,它确实有效。

我曾尝试使用g++和clang编译代码,并且两者都产生了正确的结果?结果。

我的问题是这是否是未定义的行为,或者编译器正在尝试用它做一些事情,或者我们可能被错误地教导?

int main(int argc, char const *argv[])
{
    int a = 5;
    {
        int b = 10;
        {
            int c = 15;
            {
                int a = 10;
                auto f = [&]()
                {
                    std::cout << a << b << c;
                };
                f();
                std::cout << a;
            }
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

另外,在和助理教授一起练习Lambda表达式时,他告诉我们尝试编译以下.cpp文件。

int main(int argc, char *argv[])
{
  int …
Run Code Online (Sandbox Code Playgroud)

c++ lambda

2
推荐指数
1
解决办法
136
查看次数

标签 统计

c++ ×1

lambda ×1