2017-01-07 35 views
0

我受限於編寫C++ 11代碼,但我想使用std::cbegin()。所以,我在看GCC 5.4.0的實現,在/usr/include/c++/5/bits/range_access.h我的系統上,想着我可能會寫類似的東西,我看到:還有什麼其他的std :: cbegin()除了開始()一個const引用?

template<class _Container> 
    inline constexpr auto 
    cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont))) 
     -> decltype(std::begin(__cont)) 
    { return std::begin(__cont); } 

是所有有給它?我錯過了什麼嗎?如果是這樣,那麼它怎麼不是C++ 11的一部分,如std::begin()

+0

至於爲什麼它不是部分:因爲你沒有及時寫出提案。對你感到遺憾:-) –

+5

我真的不明白這個問題。除了「是」之外還有其他答案嗎? –

+0

「std :: begin/end」被添加的主要原因之一是如此簡單的數組(它沒有'begin/end'成員函數)可以用在range-for循環中。對於那個,「std :: cbegin/cend」不是必需的。 –

回答

2

就是這一切嗎?

是的。

我錯過了什麼嗎?

不是我所知道的。

如果是這樣,它怎麼不是C++ 11的一部分,如std :: begin()?

全局模板似乎已經原提案作爲替代成員函數的一部分,但最好只建議有利於提供要麼只是全球模板,或兩者模板提供的成員函數和成員。 (假設這是最初的建議:N1674)。

委員會選擇在C++ 11中包含成員函數替代方案,而模板不在C++ 14之前。我不是委員會的成員,併爲他們不會說話,但我的猜測是,該提案的態度可能影響的決定:

雖然這個通用適配器的替代似乎很簡單,但我們仍然看好 上面提出的成員函數方法。它與當前的C++ 編程成語,如並行使用 rbegin 作爲一個容器成員函數,而 不是作爲一個通用適配器

這裏保持似乎更是C++標準庫Defect Report發展issue (2128)其中模板版本決定被採用到C++ 14畢竟。

0

不,覆蓋它。

雖然可以通過相對較少的努力將小函數添加到標準中,但時間是有限的,委員會沒有無限的資源。直到C++ 14被省略的合理有用和平凡功能的另一個例子是std::make_unique。事情會隨着時間而改善

相關問題