移動構造函數的noexcept
規範已知在C++ 0x中具有性能影響。例如,std::vector<T>::resize
,std::vector<T>::reserve
可以使用T的非投擲移動構造函數,如果它可以被證明不拋出。 noexcept
操作符是在編譯時檢查該屬性的方法。如果noexcept表示T的move-ctor沒有拋出,T對象將被移動而不是被複制,最有可能實現更高的性能。交換noexcept規範是否會影響性能?
我的問題是有關成員交換或命名空間級別的交換爲用戶定義的類T.的C++ 0x規範花費一些精力在出口noexcept的std::pair
,std::tuple
,std::array:swap
可能表明用戶定義的類應儘量規範使用相同的原則。例如,std::pair::swap
聲明等同於:
void std::pair::swap(pair& p) noexcept(noexcept(swap(first, p.first)) && noexcept(swap(second, p.second));
它基本上是說,如果first
或second
成員的任何交換拋出對的交換將拋出。交換first
,second
可能有他們自己的noexcept規範的成員。
最後的問題:有沒有在那裏(在STL或其他)的泛型算法,取決於交換noexcept規範做不同的事情?而且,這有什麼表現含義?