通过OpenFoam记录一些c++的trick(持续更新)
1.template和using的混用:
template using vector3 = Vector<T,3>
typedef Vector3 Vector3F
2.size_t
當你看到一個對象聲明為size_t類型,你馬上就知道它代表字節大小或數組索引,而不是錯誤代碼或者是一個普通的算術值
3.static_cast
將類型轉化為int
4.類后面加final表示不能繼承
5.c++11后的lambda函數:
[&](size_t i){
…to do something
}
表示傳入的是i的地址如果是等于[=],則是傳值
6.mutable關鍵字作用在成員變量前,即使某一個非靜態方法后加了const(即不能修改該函數的類里的任何一個變量),也可以修改改變量
7constexpr:constexpr是C++11中新增的關鍵字,其語義是“常量表達式”,也就是在編譯期可求值的表達式。最基礎的常量表達式就是字面值或全局變量/函數的地址或sizeof等關鍵字返回的結果,而其它常量表達式都是由基礎表達式通過各種確定的運算得到的。常量表達式主要是允許一些計算發生在編譯時,即發生在代碼編譯而不是運行的時候。這是很大的優化:假如有些事情可以在編譯時做,它將只做一次,而不是每次程序運行時。需要計算一個編譯時已知的常量,比如特定值的sine或cosin?確實你亦可以使用庫函數sin或cos,但那樣你必須花費運行時的開銷。使用constexpr,你可以創建一個編譯時的函數,它將為你計算出你需要的數值。用戶的電腦將不需要做這些工作。
constexpr int Inc(int i) {
return i + 1;
}
constexpr int a = Inc(1); // ok
constexpr int b = Inc(cin.get()); // !error
constexpr int c = a * 2 + 1; // ok
constexpr還能用于修飾類的構造函數,即保證如果提供給該構造函數的參數都是constexpr,那么產生的對象中的所有成員都會是constexpr,該對象也就是constexpr對象了,可用于各種只能使用constexpr的場合。注意,constexpr構造函數必須有一個空的函數體,即所有成員變量的初始化都放到初始化列表中。
假如你將一個成員函數標記為constexpr,則順帶也將它標記為了const。如果你將一個變量標記為constexpr,則同樣它是const的。但相反并不成立,一個const的變量或函數,并不是constexpr的。
摘自:https://www.cnblogs.com/fushi/p/7792257.html https://www.cnblogs.com/fuzhe1989/p/3554345.html
總結
以上是生活随笔為你收集整理的通过OpenFoam记录一些c++的trick(持续更新)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openFoam源码中的C++
- 下一篇: openfoam211版本安装