Tôi biết trong C++ 03, một tham chiếu không phải const không thể bị ràng buộc với giá trị.Có hợp lệ để ràng buộc các tham chiếu không liên quan đến giá trị trong C++ 11? (Sửa đổi)
T& t = getT();
không hợp lệ và trong C++ 11, chúng tôi có thể thực hiện việc này: T&& t = getT();
nhưng mã trên sẽ có tác dụng gì trong C++ 11?
Tôi đã thử nghiệm mã dưới đây với vs11:
Foo getFoo() {
return Foo();
}
void fz(Foo& f) {
}
int getInt() {
return int();
}
void iz(int& i) {
}
int main() {
{
Foo& z = getFoo(); //ok
fz(getFoo()); //ok
int& z2 = getInt(); //error: initial value of reference to non-const must be an lvalue
iz(getInt()); //same as above
}
}
Foo
là một lớp tùy chỉnh, tôi không hiểu tại sao hai dòng đầu tiên compiles.The tạm thời được tham chiếu bởi z
được destructed ở phần cuối của khu vực nội phạm vi chính. Liệu tiêu chuẩn có nói gì về điều này?
class Foo {
public:
Foo() {
std::cout << "constructed\n";
}
~Foo() {
std::cout << "destructed\n";
}
};
Tôi chỉ thấy một câu hỏi tương tự: One VS2010 bug ? Allowing binding non-const reference to rvalue WITHOUT EVEN a warning?
Thật thú vị như thế nào * vài lập trình viên * Objective-C hoặc Java đặt câu hỏi về esoterica ngôn ngữ theo định hướng như "Có phải nó có giá trị ràng buộc rvalues với các tham chiếu không liên quan đến const-const ...? " Hoặc phải tự quan tâm đến những thứ như "tài liệu tham khảo tạm thời ... bị hủy ở cuối phạm vi bên trong". Chỉ cần sayin ';) – paulsm4
Bạn có thể đăng cách bạn đã xác định Foo hay không. – Gisway
quy tắc ràng buộc không thay đổi tham chiếu Lvalue wrt AFAIK –