1. 程式人生 > >c++是個天坑(一)

c++是個天坑(一)

Contents

to be classified

  • 三種實現方法的比較(initializer_list標準庫型別;<stdarg.h> in C;C++泛型可變引數模板)
      以上提到的三種方法都可以實現變參函式。但三種方法都有其各自的有點和侷限性,在選擇時可以從以下幾個方面考慮:
      1. 若非必要,不要使用可變引數函式。應該首先考慮函式過載等其他方法。
      2. 除非需要相容C語言編譯器,否則不要使用可變引數巨集。應為這種方法最不安全;尤其是當引數為物件時這種方法易產生各種問題。畢竟這些巨集是為C語言設計的,C語言中沒有物件。
      3. 如果引數型別相同且C++11可用,則通過宣告形參為initializer_list往往是最簡單、最有效的辦法

      4. 變參模板看似最為強大。引數的型別可以不同、比可變引數巨集更加安全並且可以自動推斷引數型別和引數個數。但考慮到模板會為每一個不同的例項生成程式碼,如果函式的例項過多可能會使程式碼體積增大。另外,依靠遞迴使得功能具有侷限性,並且效率也會受到影響。