C++11的一些有用的特性
阿新 • • 發佈:2021-10-14
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