Articles & Books

Quick Q: Does [=] capture all variables in scope? -- StackOverflow

Quick A: No.

A simple but important question:

C++11 lambda capture semantics

When I use [=] to indicate that I would like all local variables to be captured by value in a lambda, will that result in all local variables in the function being copied, or just all local variables that are used by the lambda?

So, for example, if I have:

vector<int> my_huge_vector(100000);
int my_measly_int;
some_function([=](int i){ return my_measly_int + i; });

Will my_huge_vector be copied, even though I don't use it in the lambda?

Quick Q: static constexpr variable vs. constexpr function? -- StackOverflow

With a nice Quick A by Morwenn that not only gives the right answer as of today, but is current with a feature voted into C++14 just two weeks ago that lets you drop the ()'s:

static constexpr variable vs. function

Is there a difference between declaring floating point constant as a static constexpr variable and a function as in example below, or is it just a matter of style?

class MY_PI
{
public:
    static constexpr float MY_PI_VAR = 3.14f;
    static constexpr float MY_PI_FUN() { return 3.14f; }
}

An Idiot's Guide to C++ Templates -- Ajay Vijayvargiya

A lot of people appreciated the information in this pair of articles, which cover the noted topics:

An Idiot's Guide to C++ Templates -- Part 1

The Syntax Drama

Function Templates

  • Pointers, References and Arrays with Templates
  • Multiple Types with Function Templates
  • Function Template -- Template Function
  • Explicit Template Argument Specification
  • Default Arguments with Function Templates

Class Templates

  • Multiple Types with Class Templates
  • Non-type Template Arguments
  • Template Class as Argument to Class Template
  • Default Template Arguments with Class Templates
  • Class' Methods as Function Templates

An Idiot's Guide to C++ Templates -- Part 2

Requirements from the Underlying Type

  • Requirements: Function Templates
  • Requirements: Class Templates

Separation of Declaration and Implementation

  • Separating Class Implementation

Templates and Other Aspects of C++

  • Class Templates, Friends
  • Class Templates, Operator Overloading
  • Class Templates, Inheritance
  • Function Pointers and Callbacks
  • Templates and Virtual Functions
  • Templates and Macros
  • Function Overloading

STL - An Introduction

Templates and Library Development

Explicit Instantiation

C++ on the Web: Run Your Big 3D Game in the Browser! -- Andre Weissflog

cpp-web.PNGBuilding C++ to target Javascript (e.g., asm.js) and execute C++ in the browser is becoming quite the popular indoor sport. Here's a current presentation and experience report:

C++ on the Web: Run your big 3D Game in the browser! (slides)

by Andre Weissflog
Head of Development, Berlin
Bigpoint GmbH

My presentation about porting large C/C++ code bases to the browser (emscripten, flascc, Google Native Client)

From the Wrap-up slide:

  • You can run big C/C++ code bases ("a million lines of code") in the browser.
  • Javascript is already fast enough for many types of games.
  • Massive performance improvements happening right now (better code generation, JS engines better at running generated code, asm.js...)
  • ...

Quick Q: When should I use noexcept? -- StackOverflow

As C++11-compliant compilers start to roll out and be adopted, people want to know to best use new C++11 features, such as:

When Should I Really Use noexcept?

 

  1. There are many examples of functions that I know will never throw, but for which the compiler cannot determine so on its own. Should I append noexcept to the function declaration in all such cases? ... For which situations should I be more careful about the use of noexcept, and for which situations can I get away with the implied noexcept(false)?
  2. When can I realistically except to observe a performance improvement after using noexcept... Do modern compilers take advantage of noexcept in this way? If not, can I excect some of them to do so in the near future?

 

Preconditions, Part 4 -- Andrzej KrzemieĊ„ski

Here is Andrzej's final (for now) post on preconditions, posted just 

Preconditions — Part IV

by Andrzej Krzemieński

This is the last post about preconditions. We will try to address concerns about a potential UB connected with expressing preconditions. We will also try to explore how language support for preconditions could look like.

 

...

Such a support for preconditions would be a very helpful feature. But let’s not fantasize too much. For now the best thing we can do is to use assertions and comments -- a very useful and often underestimated language feature.

Quick Q: What Is the Difference Between set and unordered_set in C++? -- StackOverflow

A common Q with a nice concise A:

What is the difference between set and unordered_set in C++?

Came across this good question, which is similar but not at all same since it talks about Java, which has different implementation of hash-tables, [...] So what is the difference in C++ implementation of set and unordered_set? This question can be ofcourse extended to map vs unordered_map and so on for other C++ containers.

Here is my initial assessment...

Quick Q: How Can Use a Lambda Function as a Hash Function for unordered_map? -- StackOverflow

Quick A: Name the lambda (by assigning it to a variable), then decltype it.

People sometimes ask this, so it's worth putting out a quick link to the short answer:

How to use lambda function as hash function in unordered_map?

I wonder if it is possible to use lambda function as custom hash function for unordered_map in C++11? If so, what is the syntax?

Quick Q: Why might a C++11 range-for loop appear slow? -- StackOverflow

Quick, can you spot the problem in this line of code?

for(vector<int> vec1 : backgroundData)

Probably you can -- but what's the best solution?

Read on here, yesterday on StackOverflow:

C++11: Why does this range loop decrease FPS by 35?

[...] Is the C++11 range-based loop so much slower than the old school for? I really want to hear an answer to this, because my eyes honestly prefer the range based loop, and I'd hate to find out that the range based loop is twice as slow.