Cân nhắc this mã:Các loại tích hợp có chuyển ngữ nghĩa không?
#include <iostream>
using namespace std;
void Func(int&& i) {
++i;
}
int main() {
int num = 1234;
cout << "Before: " << num << endl;
Func(std::move(num));
cout << "After: " << num << endl;
}
đầu ra của nó là:
Before: 1234
After: 1235
Rõ ràng, i
đang được sửa đổi trong Func
, vì nó là ràng buộc để tham số i
sau khi được "chuyển đổi" để một r-giá trị tham chiếu của std::move
.
Vâng, quan điểm của tôi:
Di chuyển một đối tượng có nghĩa là chuyển quyền sở hữu các nguồn lực từ một đối tượng vào một. Tuy nhiên, các loại được cài sẵn giữ không có tài nguyên nào bởi vì chính chúng là tài nguyên. Nó không có ý nghĩa để chuyển các tài nguyên mà họ nắm giữ. Như được hiển thị trong ví dụ, giá trị của num
được sửa đổi. Tài nguyên của nó, bản thân nó, là tài nguyên đang được sửa đổi.
Các loại tích hợp có chuyển ngữ học không?
Ngoài ra, hãy tạo các đối tượng kiểu dựng sẵn sau khi nó được di chuyển (nếu có) một hành vi được xác định rõ?
Theo những gì? >> * "Di chuyển một đối tượng có nghĩa là chuyển quyền sở hữu tài nguyên từ một đối tượng vào nhau. Điều đó có thể rời khỏi (nguồn) đối tượng ban đầu trong tình trạng không xác định, nơi phân có thể là chỉ hoạt động an toàn và hiệu lực mà có thể được sử dụng trong đối tượng đó. Bất kỳ hoạt động nào đọc nội dung của các đối tượng đó đều có thể trả về các giá trị không xác định. "* – Nawaz
@Nawaz Theo những gì tôi đã đọc trong SO. –
'std :: move' không di chuyển. Ví dụ của bạn không có một chuyển động duy nhất giữa các kết quả đầu ra. –