Click here to Skip to main content
15,891,372 members
Articles / All Topics

Crazy Braces - [](){}();

Rate me:
Please Sign up or sign in to vote.
4.50/5 (2 votes)
28 Mar 2011CPOL1 min read 7.9K   2   1
Crazy Braces - [](){}();

What does this cryptic bracket sequence mean? What programming language is it? Is it valid syntax? If there is even a weak chance of this syntax being valid, then what does it mean?

Alright, alright, alright.....It is C++. That would calm most people; with all their love (pun) for C++. Specifically, it is C++0x. Amongst many other features that we have been waiting for, C++0x gives us the power of lambdas.

The formal definition of a lambda in C++0x is as follows:

[capture_mode] (parameters) mutable throw() -> return_type {
   body
}

So a lambda may capture one or more variables in scope by value or by reference, or it may capture none. Specifying return_type is not necessary if the type can be inferred or is void.

For instance, astd::for_each's functor based code could be inlined with a lambda as follows:

C++
std::for_each(v.begin(), v.end(), [](int x) {
   cout << x << std::endl;
}); 

A lambda definition could be assigned to a variable and then used or invoked later.

C++
auto lessthan = [](int left, int right) {
 return left < right;
}; 

In the above code, lessthan represents a function that takes two int parameters, and returns a bool. And it can be invoked as lessthan(2, 3), which returns true. The cute thing about a lambda is that it can be invoked directly right after its definition. The following code defines a lambda (which takes two ints and returns a bool) and invokes it right away.

C++
[](int left, int right) {
   return left < right;
} (2, 3);

Coming back to our initial question...............you should have guessed it by now. The bracket sequence - [](){}(); - is nothing but a definition followed by a call (right away) to a lambda taking no arguments and returning nothing.

To end with a quote, C++ code is like calligraphy. In other words, it is beautiful to those who understand it, while it is cryptic to others.

P.S.: Pardon me if calligraphy is inappropriate in this context.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralAlready published Pin
Indivara29-Mar-11 1:32
professionalIndivara29-Mar-11 1:32 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.