If you are unfamiliar with threads in C++ I recommend you take a look at my article about threads before reading this one.
Futures are a concept of concurrent programming. A future is a way to access a result from an asynchronous operation. As a simple example:
1 2 std::future<int> fut = functionThatReturnsFuture(); int val = fut.get();
The code above should be very easy to read. We execute a function and it returns a future. Then we use this future to get a value. The interesting thing about this code is that functionThatReturnsFuture can be (and most likely is) an asynchronous operation. When we call fut.get(), our code will wait for that asynchronous operation to complete. When the operation completes, it will return an int value that will then be assigned to val.