string foo() { return "hello"; }
int main()
{
//below should be illegal for binding a non-const (lvalue) reference to a rvalue
string& tem = foo();
//below should be the correct one as only const reference can be bind to rvalue(most important const)
const string& constTem = foo();
}
- GCC là một tốt để cung cấp cho một lỗi biên dịch: khởi tạo không hợp lệ tham chiếu không const loại
std::string&
từ một tạm thời loạistd::string
- VS2008 không phải là quá xấu như ít nhất nó mang lại một biên dịch cảnh báo: C4239 cảnh báo: mở rộng không chuẩn được sử dụng: 'khởi': chuyển đổi từ
std::string
đểstd::string &
một không const tham khảo chỉ có thể được liên kết với một giá trị trái - Ở đây có vấn đề một - VS2010 (SP1) comples tốt KHÔNG CÓ bất kỳ lỗi hoặc cảnh báo, TẠI SAO ?? !! Tôi biết tham chiếu rvalue trong VS2010 có thể được sử dụng để liên kết với rvalue nhưng tôi KHÔNG sử dụng
&&
, thay vào đó trong mã demo, tôi chỉ sử dụng tham chiếu không phải lvalue!
Ai đó có thể giúp tôi giải thích hành vi của VS2010 tại đây không? Nó là một lỗi! Cảm ơnMột lỗi VS2010? Cho phép tham chiếu không ràng buộc liên quan đến rvalue KHÔNG CÓ SỰ BÁO CÁO?
thiết lập cảnh báo của bạn là gì? Có lẽ đó là cấu hình của bạn mà thay đổi, và không thực hiện của họ? –
Tôi đã sử dụng VS2008 trong một thời gian nhưng gần đây đã cài đặt VS2010 nên VS10 nên sử dụng thiết lập mặc định ... – Gob00st
thì tôi sợ rằng ngưỡng cảnh báo đơn giản là không đủ cao. Sử dụng '\ W4' để kích hoạt cảnh báo trong phạm vi' 4xxx'. –