1. 程式人生 > 其它 >C++11的一些有用的特性

C++11的一些有用的特性

C++11 的一些有用的特性

auto & for

auto 會自動幫你匹配型別,不過定義變數的時候要初始化一個值。

可以用來簡化需要寫迭代器的 for

    vector<int>v;
    for(auto x:v){
        //...
    }

for 也有了新寫法

    int a[5]={0,1,2,3,4};
    for(int x:a) cout<<x<<endl;

constexpr

這個東西是“常量表達式” 的意思。

你可以把它看作一個升級版的 const

所謂常量表達式,指的就是由多個(\(\ge 1\))常量組成的表示式。

如果表示式中的成員都是常量,那麼該表示式就是一個常量表達式。

並且常量表達式一旦確定,其值將無法修改。

簡單來說,他會在編譯的時候直接幫你計算出這個常量表達式的值。

例項:

constexpr int si=1e5+10;
int a[si];

有什麼用呢?

我們在取模的時候使用 constexpr,可以加速取模的過程。

實測效果:

// 取模 1e9 次
const : 3280 ms
constexpr : 1750 ms

lambda

部分引用自:Link

可以當作一個小型函式?

寫法是: _Type _Name[_Capture](_Params)_Opt->_Ret{_Body}

分別是:

型別,名字,捕獲列表,引數表,函式選項,函式返回值,函式體。

捕獲列表有這幾種(部分常用):

  • [] 不捕獲任何變數。

  • [&] 捕獲外部作用域中所有變數,並作為引用在函式體中使用(按引用捕獲)。

  • [=] 捕獲外部作用域中所有變數,並作為副本在函式體中使用(按值捕獲)。

  • [=,&foo] 按值捕獲外部作用域中所有變數,並按引用捕獲變數 foo

幾個例項:


int main(){
    int x=1,y=2,z=3;
    auto f_1=[](int a)->int{ return a+1;}; // a 可以看作函式的成員
    auto f_2=[&]()->int{ return ++x;}; //可以修改 x
    auto f_3=[=]()->int{ return x+y+z;}; // 只是當作副本
    auto f_4=[=,&x]()->int{ return (x++)+y+z;}; // 只引用 x
}

本文來自部落格園,作者:black_trees,轉載請註明原文連結:https://www.cnblogs.com/BTeqwq/p/new-bug.html