C++0x 的新東西
在 PLNews 上看到有人整理了最近一次委員會討論的內容:
- Trip Report: April 2007 ISO C++ Standards Meeting
- Trip Report: July 2007 ISO C++ Standards Meeting
- Trip Report: October 2007 ISO C++ Standards Meeting
整理一下目前比較感興趣的 feature
- Template aliases (typedef templates)
- Variadic templates (type varargs for templates)
- Unicode support
- Strongly typed enums
- Constant expression
- decltype
- Alignment
- Concurrency
- Threading library
template<typename era>
using Gundam = MobileSuit<dual_eye, antenna, era>;Gundam<UC> RX78; //真是爛例子 不過臨時想的就別太在意了
要當作單純的 generic typedef 來使用也是可以的
簡單來說就是變動長度的模板參數,proposal 實作了一個 printf 當作例子
用來實作 tuple 也很方便 (boost::tuple 您辛苦了…)
不曉得能不能結合 template alias,可以的話就修改一下上面的例子
template<typename… weapons>
using Gundam = <dual_eye, antenna, weapons>Gundam<BeamRifle, BeamSaber> RX78;
多了 char16_t 與 char32_t 兩種型別,可以使用 unicode 字串
一個把 enum 複雜化的機制 (誤)
不過讓一些錯誤可以在 compile-time 就找出來也不錯啦
將一些函式宣告為 constexpr,讓整個運算可以在 compile-time 完成
可以方便用在一些 constant context,例如陣列長度的宣告等等
(也許 template 的 constant parameter 也可以?)
不過也不是萬能就是了,沒辦法先算出來的東西,用了 constexpr 也沒用
另外在遞迴的使用上似乎也有限制 (ref: n2235.pdf)
感覺像是 typeof 之類的運算子,傳回值可以直接用來宣告新的變數
處理 storage alignment 的語法,以前應該都是用 pragma 去設定
現在直接加入 alignas 和 alignof 來處理
嗯…對這方面不熟,找個時間再來看
提供 thread 和基本的 mutex 等支援
還有很多沒寫出來,一方面是我能力不夠無法理解,也真的很久沒碰 C++ 了;一方面也是懶得挖資料了(汗)。簡單做一下結論 (個人感想…),未來用 c++ 開發大概會增加一些特色:
- 提供更抽象的語意、更泛化的語法支援
- 跟 OS 的相依性越來越緊密 (也許影響 portability?)
- 編譯時間越來越長 (最好通通都在 compile-time 算完XD)
- 越來越難除錯 (compiler 吐出來的 message 越來越複雜)
November 6th, 2007 at 5:53 pm
實際上 C++0x (幾乎已經確定會是 C++09) 的 error message 應該會更容易被 coder 解毒.
請參考 Concepts (Revision 1)