2012-07-06 44 views
8

Thực hiện các cuộc gọi của các nhà thầu xây dựng std có đủ điều kiện với std:: không?Các cuộc gọi của các nhà thầu xây dựng có cần phải đủ điều kiện không?

class whatever : public std::runtime_error 
{ 
public: 
    explicit whatever(const std::string& what) : runtime_error(what) {} 
};           //^do I need std:: here? 

Nó hoạt động trên trình biên dịch của tôi mà không đủ điều kiện, nhưng tôi không chắc liệu hành vi đó có phải là tiêu chuẩn hay không.

+1

Về cơ bản, bạn đang hỏi xem bạn có thể tham khảo các lớp cơ sở không đủ điều kiện (không nhất thiết là 'std') không? –

Trả lời

7

Không, bạn không có. Các tên trong danh sách khởi tạo được tra cứu trong phạm vi của lớp whatever. Phạm vi lớp này bao gồm các tên được khai báo trong các lớp cơ sở và tên của lớp cơ sở (runtime_error) được chèn vào phạm vi std::runtime_error (đây là hành vi tiêu chuẩn cho tất cả các lớp).

Lưu ý rằng điều này không hiệu quả nếu tên bạn sử dụng là typedef cho tên lớp thực tế. Bạn có thể dễ dàng bị cám dỗ, ví dụ: std::istream và bạn bè. See here.

+1

Xem C++ 2003, §9.2, để định nghĩa "* tên được tiêm-lớp *". –

+0

@ Robᵩ: Cảm ơn, tôi không có tiêu chuẩn của tôi. : o –

1

Không cần trình độ trong danh sách khởi tạo (thành thật mà nói tôi không biết liệu trình độ này có được phép ở đó không), vì đó là cơ sở và sẽ được tìm thấy bằng cách tra cứu thông qua lớp học.

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