Pages

Tuesday, November 6, 2007

C++0x 的新東西

在 PLNews 上看到有人整理了最近一次委員會討論的內容:

整理一下目前比較感興趣的 feature
  • Template aliases (typedef templates)
  • n2258.pdf
    template<typename era> using Gundam = MobileSuit<dual_eye, antenna, era>;

    Gundam<UC> RX78; //真是爛例子 不過臨時想的就別太在意了

    要當作單純的 generic typedef 來使用也是可以的
  • Variadic templates (type varargs for templates)
  • n2087.pdf n2242.pdf

    簡單來說就是變動長度的模板參數,proposal 實作了一個 printf 當作例子 用來實作 tuple 也很方便 (boost::tuple 您辛苦了...)

    不曉得能不能結合 template alias,可以的話就修改一下上面的例子

    template<typename... weapons> using Gundam = <dual_eye, antenna, weapons>

    Gundam<BeamRifle, BeamSaber> RX78;

  • Unicode support
  • n2249.html n2442.htm

    多了 char16_t 與 char32_t 兩種型別,可以使用 unicode 字串

  • Strongly typed enums
  • n2347.pdf

    一個把 enum 複雜化的機制 (誤) 不過讓一些錯誤可以在 compile-time 就找出來也不錯啦

  • Constant expression
  • n2235.pdf n2349.pdf

    將一些函式宣告為 constexpr,讓整個運算可以在 compile-time 完成 可以方便用在一些 constant context,例如陣列長度的宣告等等 (也許 template 的 constant parameter 也可以?)

    不過也不是萬能就是了,沒辦法先算出來的東西,用了 constexpr 也沒用 另外在遞迴的使用上似乎也有限制 (ref: n2235.pdf)

  • decltype
  • n2194.pdf n2343.pdf

    感覺像是 typeof 之類的運算子,傳回值可以直接用來宣告新的變數

  • Alignment
  • n2341.pdf

    處理 storage alignment 的語法,以前應該都是用 pragma 去設定 現在直接加入 alignas 和 alignof 來處理

  • Concurrency
  • n2429.htm

    嗯...對這方面不熟,找個時間再來看

  • Threading library
  • n2447.htm

    提供 thread 和基本的 mutex 等支援

還有很多沒寫出來,一方面是我能力不夠無法理解,也真的很久沒碰 C++ 了;一方面也是懶得挖資料了(汗)。簡單做一下結論 (個人感想...),未來用 c++ 開發大概會增加一些特色:
  1. 提供更抽象的語意、更泛化的語法支援
  2. 跟 OS 的相依性越來越緊密 (也許影響 portability?)
  3. 編譯時間越來越長 (最好通通都在 compile-time 算完XD)
  4. 越來越難除錯 (compiler 吐出來的 message 越來越複雜)


This article was originally posted on this site.

1 comment:

  1. 實際上 C++0x (幾乎已經確定會是 C++09) 的 error message 應該會更容易被 coder 解毒.
    請參考

    ReplyDelete