Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Non-static data member initializers

Use case

Default values for struct members.

Explanation

Before C++11, defaults had to be set in every constructors. Now we can initialize members at declaration.

Code

#include <cstdint>
#include <iostream>

// Before C++11.
struct SectionOld {
  uint64_t addr;
  uint64_t size;
  SectionOld() : addr(0), size(0x1000) {}
};

// C++11.
struct Section {
  uint64_t addr = 0;
  uint64_t size = 0x1000;
};

int main() {
  Section s1;
  std::cout << "addr: 0x" << std::hex << s1.addr << ", size: 0x" << std::hex
            << s1.size << "\n";
  return 0;
}

View on GitHub.

Output

$ ./src/c++11/build/non-static-data-member-initializers
addr: 0x0, size: 0x1000