template<typename T, typename U>autoadd(T x, U y){return x+y;}
C++11引入了區間迭代
int array[]={1,2,3,4,5};for(auto&x : array){
std::cout << x << std::endl;}
初始化列表
#include<initializer_list>//構造函數列表初始化
class Magic {
public:Magic(std::initializer_list<int> list){}};
Magic magic ={1,2,3,4,5};
std::vector<int> v ={1,2,3,4};//普通函數形參voidfunc(std::initializer_list<int> list){return;}func({1,2,3});//初始化任意對象struct A {int a;float b;};struct B {B(int _a,float _b):a(_a),b(_b){}
private:int a;float b;};
A a {1,1.1};// 統一的初始化語法
B b {2,2.2};
模板實例化標註(傳統C++會在每一次使用時被編譯器實例化)
template class std::vector<bool>;// 強行實例化extern template class std::vector<double>;// 不在該編譯文件中實例化模板
C++11開始,連續的右尖括號將會變得合法
類型別名模板
typedefint(*process)(void*);// 定義了一個返回類型爲 int,參數爲 void* 的函數指針類型,名字叫做 process
using process =int(*)(void*);// 同上, 更加直觀
template <typename T>
using NewType = SuckType<int, T,1>;// 合法
委託構造
class Base {
public:int value1;int value2;Base(){
value1 =1;}Base(int value):Base(){// 委託 Base() 構造函數
value2 =2;}};intmain(){
Base b(2);
std::cout << b.value1 << std::endl;
std::cout << b.value2 << std::endl;}
繼承構造
class Base {
public:int value1;int value2;Base(){
value1 =1;}Base(int value):Base(){// 委託 Base() 構造函數
value2 =2;}};
class Subclass : public Base {
public:
using Base::Base;// 繼承構造};intmain(){
Subclass s(3);
std::cout << s.value1 << std::endl;
std::cout << s.value2 << std::endl;}