What do these statement does?
i can’t understand the right-hand of =(equal to) does. can anyone help me with it??
Statement :
auto Submask=[&](int A,int B{return((A&B)==A);};
Thanks in advance !!
What do these statement does?
i can’t understand the right-hand of =(equal to) does. can anyone help me with it??
Statement :
auto Submask=[&](int A,int B{return((A&B)==A);};
Thanks in advance !!
The statement
auto Submask=[&](int A,int B){return((A&B)==A);};
defines a C++11 lambda function called Submask, capturing (completely unnecessarily, as it it a pure function) local variables by reference, and taking two int parameters A and B. The return type can be deduced by the compiler to be bool (so actually, this is probably C++14).
The result of invoking the lamba with arguments A and B will be true if and only if all bits set in A are also set in B .
what is lamda funtion ? i heard about it but don’t know what is it.
in C++, you can look at it (from the point of view of usefulness) as a function that can be defined within a function (as happens here), or as an “anonymous” function that can be defined and invoked without giving it a name, like e.g.
vector<Dog> dogs = /* list of Dog objects */;
sort(dogs.begin(), dogs.end(), [](const auto& dog1, const auto& dog2) { return dog1.age < dog2.age; }); // Sort the vector dogs in order of increasing age.
Se e.g. https://www.drdobbs.com/cpp/lambdas-in-c11/240168241
one last question, what is the use of that [ ] bracket?
is it return type or something else?
No, that’s the captures list which describes how the lambda is allowed to refer to local variables in the enclosing scope.
For example, in
#include <iostream>
using namespace std;
int main()
{
int C = 5;
auto blah = [](const int A, const int B) { return A + B + C; };
blah(2, 3);
}
we have a compiler error - the body of the lambda makes use of the variable C in the scope enclosing the lambda, but the lambda’s capture list is empty. Adding C to the capture list fixes the error:
auto blah = [C](const int A, const int B) { return A + B + C; };
We could also use [&] (as your example does) to make all local variables accessible, by reference, to the body of the lamba, or [=] to make all local variables accessible, by value, to the body of the lambda, as shortcuts, but this usage is discouraged as it can lead to unintended side-effects 
Thanks…! 
Can we add pass multiple variables like this [C,D,E] ? and is it pass by reference or value ?
Yes, you can capture multiple local variables, each by reference or value e.g.
#include <iostream>
using namespace std;
int main()
{
int C = 5, D = 6, E = 3;
auto blah = [C, &D, E](const int A, const int B) { D++; return A + B + C + D + E; };
E = 10'000;
cout << blah(2, 3) << endl;
cout << "D: " << D << endl;
}
Here, C and E are captured by value, and D is captured by reference.