2012-04-03 41 views
9

Ví dụ mã:Di chuyển ngữ nghĩa và các loại nguyên thủy

int main() 
{ 
    std::vector<int> v1{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
    std::cout << "Printing v1" << std::endl; 
    print(v1); 
    std::vector<int> v2(std::make_move_iterator(v1.begin()), 
         std::make_move_iterator(v1.end())); 
    std::cout << "Printing v1" << std::endl; 
    print(v1); 
    std::cout << "Printing v2" << std::endl; 
    print(v2); 

    std::vector<std::string> v3{"some", "stuff", "to", 
         "put", "in", "the", "strings"}; 
    std::cout << "Printing v3" << std::endl; 
    print(v3); 
    std::vector<std::string> v4(std::make_move_iterator(v3.begin()), 
           std::make_move_iterator(v3.end())); 
    std::cout << "Printing v3" << std::endl; 
    print(v3); 
    std::cout << "Printing v4" << std::endl; 
    print(v4); 
} 

Output:

Printing v1 
1 2 3 4 5 6 7 8 9 10 
Printing v1 
1 2 3 4 5 6 7 8 9 10 
Printing v2 
1 2 3 4 5 6 7 8 9 10 
Printing v3 
some stuff to put in the strings 
Printing v3 

Printing v4 
some stuff to put in the strings 

Câu hỏi

  1. Kể từ khi hoạt động di chuyển o n loại nguyên thủy chỉ là một bản sao, tôi có thể giả định rằng v1 sẽ không thay đổi hoặc trạng thái không xác định ngay cả với các kiểu nguyên thủy không?

  2. Tôi giả định lý do tại sao các kiểu nguyên thủy không có ngữ nghĩa di chuyển là vì sao chép nhanh hoặc thậm chí nhanh hơn, điều này có đúng không?

Trả lời

14
  1. Không, nếu bạn muốn để có thể giả định này, bạn nên sao chép, không nhúc nhích.

  2. Di chuyển để đối tượng nguồn ở trạng thái hợp lệ nhưng không xác định. Các loại nguyên thủy do thể hiện ngữ nghĩa di chuyển. Thực tế là đối tượng nguồn không thay đổi là những gì cho thấy rằng sao chép là cách nhanh nhất để thực hiện di chuyển.

+1

Quy tắc "trạng thái hợp lệ nhưng không xác định" chỉ áp dụng cho các loại thư viện chuẩn ([lib.types.movedfrom]). Các kiểu nguyên thủy "Di chuyển" được điều khiển bởi các quy tắc ngôn ngữ cốt lõi, và đối với các loại như vậy, một động thái là một bản sao. –

Các vấn đề liên quan