Tôi đã tự hỏi về hành vi C++ khi giá trị r được chuyển giữa các hàm.thông số giá trị r trong một hàm
Nhìn vào mã đơn giản này:
#include <string>
void foo(std::string&& str) {
// Accept a rvalue of str
}
void bar(std::string&& str) {
// foo(str); // Does not compile. Compiler says cannot bind lvalue into rvalue.
foo(std::move(str)); // It feels like a re-casting into a r-value?
}
int main(int argc, char *argv[]) {
bar(std::string("c++_rvalue"));
return 0;
}
Tôi biết khi tôi bên bar
chức năng tôi cần phải sử dụng move
chức năng để gọi foo
chức năng. Câu hỏi của tôi bây giờ là tại sao?
Khi tôi bên trong bar
chức năng biến str
đã phải là một r-value, nhưng trình biên dịch hoạt động như nó là một l-giá trị.
Ai đó có thể trích dẫn một số tham chiếu đến tiêu chuẩn về hành vi này không? Cảm ơn!
Đối tượng được đặt tên luôn là giá trị. Đó là lý do tại sao bạn cần 'di chuyển'. –