c++ - lambda如何捕获结构的成员

标签 c++

我的代码是这样的:

struct foo {
    int first;
    int second;
};

void func(foo& A) {
    Schedule([=]() 
    {
        DoWork(A.first, A.second)
    });    
}

lambda 是按值捕获对结构的引用还是按值捕获 .first 和 .second?

谢谢,

最佳答案

采用以下代码:

#include <iostream>
using namespace std;

class NeedDeepCopy
{
public:
    NeedDeepCopy() 
    {
    };

    NeedDeepCopy(const NeedDeepCopy& other)
    {
        data = new int[1];
        data[0] = 0x90;
    }
    int *data;
};

void func(NeedDeepCopy& obj) {

    auto lambda = [=]() mutable 
    {
        if(*obj.data == 0x90)
            cout << "0x90 - a copy was made";
    };    

    if(*obj.data == 0x88)
        cout << "Original value is 0x88" << endl;


    lambda();
}

int main() {
    NeedDeepCopy obj;
    obj.data = new int[1];
    *obj.data = 0x88;


    func(obj);

    // your code goes here
    return 0;
}

http://ideone.com/Ws6KJX

答案是:复制了整个对象/结构。如果您正在处理需要深拷贝的对象,您需要注意,否则您可能会得到未初始化的数据。

关于c++ - lambda如何捕获结构的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005248/

相关文章:

c++ - 如何在虚幻引擎项目中使用C++ Core Checker?

c++ - std::unique_ptr 上的 CPPUNIT_ASSERT_EQUAL

c++ - 为什么将内联函数def放在其他包含内联函数声明的头文件的头文件中是链接错误?

c++ - 将 std::wstring 从 Visual Studio 移植到 mingw gcc

指向类成员的 C++ 函数指针

c++ - 释放由赋值运算符 C++ 分配的内存

c++ - 如何将 std::chrono::system_clock::duration 转换为 struct timeval

C++ std::map s 作为参数

c++ - 如何编写 makefile 来处理头文件中的更改

c++ - 幂后取模算法