如何理解 C++11 添加的 plus<void> 特化版?
VS2015版,STL裡面的 累加函數 accumulate(accumulate(_InIt _First, _InIt _Last, _Ty _Val)); 中,再次調用4個參數的版本,並且函數對象是 內置的 plus&
();跟進去發現,這是個特化版本,並且語法生硬。。讀不懂的程度 這一塊代碼要如何理解呢?這個特化版有什麼存在意義?跟泛化版的Plus&
看似沒有區別,兩者功能上都是一樣的,對兩個值進行相加。 泛化版本:operator()(左操作數,右操作數) return 左操作數+右操作數;
OT: 請認準 plus()
.
[Wandbox]三へ( へ?? ?)へ ????
首先 std::plus&
簡單地說,std::plus&
- 兼容任意合法類型。
- 可以直接用 std::plus&<&> 而不需要寫出完整的類型(std::plus&<&> == std::plus&
)。 - 利用完美轉發提高效率。
就是void版本的東西的operator()是接受不加任何限制的T類型的函數模板,然後實際上調用哪個+,全靠ADL
用戶可能為自己定義的類型UT特化std::plus&
otoh,特化standard library class的member function template是UB,所以可以用plus&
推薦閱讀:
※再開一個討論區,C++11的std::function和template function的比較?
※為什麼Visual Studio系列產品基本不做防盜版?
※用vc++編寫窗口程序,控制多軸運動。類似於實現PLC串口通信之類的。應該學習那方面的知識,怎麼快速入手呢?
※Windows 7 和 Windows XP 哪個對 VC6.0 的支持好?
※為什麼VS對C++11 C++14的特性支持的那麼慢?