C++ Ngôn ngữ tiêu chuẩn khẳng định các thành phần liên quan đến mẫu sau trong thư viện chuẩn:Trong khai báo "std :: vector <X> f();", là "std :: vector <X>" một instantiation?
Các hiệu ứng được xác định ... nếu một loại không đầy đủ được sử dụng như một mẫu đối số khi instantiating một thành phần mẫu, trừ khi được phép đặc biệt cho thành phần đó (C++ 11 §17.6.4.8/2).
Nguyên nhân sau gây ra sự kiện cho mẫu lớp học std::vector
?
class X;
std::vector<X> f(); // Declaration only; we will define it when X is complete
Để yêu cầu nó một cách khác, trong phần khai báo hàm std::vector<X> f();
, là std::vector
instantiated với lập luận X
? Hoặc, có phải là std::vector<X>
không được khởi tạo cho đến khi f()
được sử dụng hoặc xác định không?
Tương tự như vậy, nguyên nhân sau đây gây ra sự kiện của mẫu lớp học std::vector
?
class X;
typedef std::vector<X> XVector; // We will complete X before we use XVector
Trong khi tôi sử dụng std::vector
trong các ví dụ này, câu hỏi áp dụng như nhau cho tất cả các mẫu.
Câu trả lời hay sẽ cung cấp tham chiếu đến Tiêu chuẩn ngôn ngữ C++.Tôi đã tìm kiếm thông qua Language Standard nhưng không thể tìm thấy câu trả lời dứt khoát. –
Tôi chưa bao giờ thấy "không xác định" được sử dụng với một phần của quá trình biên soạn trước ... –
Tại sao bạn muốn biết? –