Trong khi đọc phần giải thích này về giá trị và giá trị, những dòng mã này đã khiến tôi gặp phải:
int& foo();
foo() = 42; // OK, foo() is an lvalue
Tôi đã thử nó trong g ++, nhưng trình biên dịch nói "tham chiếu không xác định đến foo ()". Nếu tôi thêm
int foo()
{
return 2;
}
int main()
{
int& foo();
foo() = 42;
}
Nó biên dịch tốt, nhưng chạy nó gây ra lỗi phân đoạn . Chỉ dòng
int& foo();
tự nó cả biên dịch và chạy mà không gặp bất kỳ vấn đề gì.
Mã này có nghĩa là gì? Làm thế nào bạn có thể gán một giá trị cho một lời gọi hàm, và tại sao nó không phải là một rvalue?