建有this online compiler,下面的代碼:爲什麼不能std :: tuple <int>可以複製?
#include <iostream>
#include <type_traits>
#include <tuple>
int main() {
std::cout << std::is_trivially_copyable<std::tuple<int>>::value << std::endl;
std::cout << std::is_trivially_copyable<std::pair<int, int>>::value << std::endl;
std::cout << std::is_trivial<std::tuple<int>>::value << std::endl;
std::cout << std::is_trivial<std::pair<int, int>>::value << std::endl;
return 0;
}
輸出:
0
0
0
0
我得到與Visual Studio相同的結果,2015年
爲什麼是這樣呢?是否有POD類型的std::tuple
的有效理由,更不用說簡單的std::pair
,不能簡單地複製?我認爲他們的實現提供了一些自定義賦值操作符,但它們與編譯器生成的默認版本有什麼不同?
http://stackoverflow.com/questions/36625317/error-cannot-pass-objects-of-non-trivially-copyable-type-through意味着該標準不需要它,所以實現不打擾 – happydave