2010-08-31 24 views
9

Tôi muốn đúc này:cast const Lớp sử dụng dynamic_cast

class Base 
{ 
public: 
    virtual ~Base(){}; 
}; 
class Der : public Base {}; 

int main() 
{ 
    const Base* base = new Der; 
    Der* der = dynamic_cast<Der*>(base); // Error 

    return 0; 
} 

Tôi nên làm gì? Tôi đã cố gắng để đặt: const Der* der = dynamic_cast<Der*>(base); để mantain const nhưng điều này không hoạt động.

Trả lời

17

Hãy thử điều này:

const Der* der = dynamic_cast<const Der*>(base); 

dynamic_cast không có khả năng loại bỏ khuôn khổ vòng loại const. Bạn có thể bỏ qua const riêng biệt bằng cách sử dụng const_cast, nhưng thường là một ý tưởng tồi trong hầu hết các trường hợp. Đối với vấn đề đó, nếu bạn bắt gặp chính mình bằng cách sử dụng dynamic_cast, thường là dấu hiệu cho thấy có cách tốt hơn để làm những gì bạn đang cố gắng làm. Nó không phải lúc nào cũng sai, nhưng hãy nghĩ nó như một dấu hiệu cảnh báo rằng bạn đang làm mọi thứ một cách khó khăn.

+0

Tôi đã thử nó không hoạt động. – okami

+0

Bạn cần const hai lần - một lần trong loại biến được gán cho, và một lần trong 'dynamic_cast'. Trong ví dụ về những gì bạn đã thử, bạn chỉ có cái đầu tiên. – Eclipse

+0

ok. Nhưng chỉ là một quesiton dưới câu hỏi của tôi. Tại sao tôi nên giữ ảo ~ Base() {}; để dynamic_cast không cho tôi một lỗi? – okami

2
const Der* der1 = dynamic_cast<const Der*>(base); 

Der* der2 = dynamic_cast<Der*>(const_cast<Base*>(base)); 

khi cả hai thao tác đúc ở trên đều hoạt động, điều thứ hai nên tránh.

+0

Đã chỉnh sửa để thêm thẻ mã. – Puppy

Các vấn đề liên quan