我查看了GCC STL(4.6.1),看到std::copy()
使用優化版本,以防內置的__is_trivial()
評估爲true
。std :: copy/memcpy/memmove優化
由於std::copy()
和std::reverse_copy()
模板對於複製數組中的元素非常有用,所以我想使用它們。然而,我有一些類型(這是模板實例化的結果),它們是包含一些普通值的結構,沒有指針,也沒有複製構造函數或賦值運算符。
G ++是否足夠聰明地發現我的類型實際上是微不足道的?在C++ 98中有沒有辦法確保STL實現知道我的類型是微不足道的?
我想在C++ 11中,使用is_trivial<>
類型特徵會變得很方便。這是正確的嗎?
謝謝!
編輯:對不起,這麼晚了,但這裏是一個很簡單的Type
類的例子,這對GCC和llvm來說並不重要。有任何想法嗎?
#include <iostream>
struct Spec;
template <typename TValue, typename TSpec>
class Type
{
public:
TValue value;
Type() : value(0) {}
};
int main()
{
std::cerr << "__is_trivial(...) == "
<< __is_trivial(Type<char, Spec>) << '\n';
return 0;
}
C++ 03 PODs forbit默認構造函數也如果我記得,這可能是什麼防止這是微不足道的。 – 2012-01-18 16:59:34
@MooingDuck:謝謝,我認爲這是解釋。連同Mathieu的回答,這回答了我的問題。 – Manuel 2012-01-18 17:21:21