Effective Modern C++:alias,enum,override

Alias is preferred to typedef

It is clearer:

typedef void (*FP)(int, const std::string&); // old way: typedef
using FP = void (*)(int, const std::string&); // new way: alias

It support template:

template<typename T>
using MyAllocList = std::list<T, MyAlloc<T>>;

enum is preferred to be scoped

Comparison between the old and new way:

enum Color { black, white, red };
enum class Color { black, white, red };

Using the old way, the enums are all globally active,then:

auto white = false

will be wrong, because the word white is already defined. When using the new method, Color::white will be used instead, so white is now free to use.

We can also call it “enum class”.

Attention: scoped enum can not be converted to int implicitly! Color::white is not equal to 1, it is just Color::white. But you can define a enum’s underlying type:

enum Color: short {black=0,white=1,red=2};

Forward declaration is supported:

enum class Color;

override should be added when overriding

class  Base
	Base() {};
	 ~Base() {};
	 virtual void func() 
       	cout << "I am base class\n"; 

class Derived : public Base
	Derived() {};
	~Derived() {};
	void func() override 
      	cout << "I am derived class\n"; 
void main()
	Derived derived;
/*The output will be:
I am base class
I am derived class
Wangxin -->


I am algorithm engineer focused in computer vision, I know it will be more elegant to shut up and show my code, but I simply can't stop myself learning and explaining new things ...