Được xây dựng với this online compiler, đoạn code sau:Tại sao không thể std :: tuple <int> có thể sao chép một cách trivially?
#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;
}
kết quả đầu ra:
0
0
0
0
tôi nhận được kết quả tương tự với Visual Studio 2015.
Tại sao là trường hợp? Có một lý do hợp lệ nào là std::tuple
của các loại POD, không nói một cách đơn giản std::pair
, không thể sao chép một cách trivially? Tôi đoán việc triển khai của họ cung cấp một số toán tử gán tùy chỉnh, nhưng chúng sẽ khác với các phiên bản mặc định được trình biên dịch tạo ra như thế nào?
http://stackoverflow.com/questions/36625317/error-cannot-pass-objects-of-non-trivially-copyable-type-through ngụ ý rằng tiêu chuẩn không yêu cầu nó, vì vậy việc triển khai không làm phiền – happydave