类中的成员变量在lambda中的使用

本文主要验证在类的成员函数中,是否可以通过lambda处理成员变量

示例

//file.hpp文件

#include <iostream>

namespace file
{
    
    

class MyFile final
{
    
    
public:
    MyFile();
    ~MyFile();

public:
    void lambdaTest();
    void printCountValue();

private:
    int32_t m_count{
    
    100};
};


MyFile::MyFile(){
    
    }

MyFile::~MyFile(){
    
    }

/*
* @brief lambda test
*/
void MyFile::lambdaTest()
{
    
    
    int32_t i = 10;
    auto f = [=](){
    
    
        m_count = m_count * 2;   //可以改变成员变量的值
        //i = i*2;    //值捕获,不允许修改变量的值,会报错
        std::cout<<"m_count value is: "<<m_count<<std::endl;
        std::cout<<"i value is: "<<i<<std::endl<<std::endl;
    };
    f();

    auto f1 = [&](){
    
    
        m_count = m_count * 2;
        i = i*2;
        std::cout<<"m_count value is: "<<m_count<<std::endl;
        std::cout<<"i value is: "<<i<<std::endl<<std::endl;
    };
    f1();
}

void MyFile::printCountValue()
{
    
    
    std::cout<<"m_count(print) value is: "<<m_count<<std::endl;
}

}
//main.cc
#include <iostream>
#include <ostream>
#include <istream>
#include <fstream>  //实现读写文件
#include <iomanip>
#include <string>
#include <sstream>

#include "file.hpp"

using namespace file;

int main(int argc, char* argv[])
{
    
    
    MyFile myfile;
    myfile.lambdaTest();
    myfile.printCountValue();
    
    return 0;
}

输出

m_count value is: 200
i value is: 10

m_count value is: 400
i value is: 100

m_count(print) value is: 400

结论

在类的成员函数中,无论是值捕获还是引用捕获,都可以改变成员变量的值。

讨论
1.在类的成员函数中,lambda函数是否也认为是类的内部,所以可以通过值捕获来修改成员变量的值;

2.在类的成员函数中,lambda的捕获列表不能写成员变量[m_count] 或 [&m_count],否则会报错;但是可以直接写[=]或[&]

猜你喜欢

转载自blog.csdn.net/shouhu010/article/details/130148102