2013-03-26 24 views

Trả lời

11

Một hàm tạo cần std::initializer_list được xem xét khi bạn sử dụng khởi tạo danh sách. Đó là quá trình khởi tạo liên quan đến danh sách khởi chạy được tăng tốc:

QVector<int> v{1, 2, 3, 4, 5}; 
// or equivalently 
QVector<int> v = {1, 2, 3, 4, 5}; 

Lưu ý rằng đây là tính năng C++ 11. Trong thực tế, cú pháp đầu tiên là mới đối với C++ 11, trong khi cú pháp thứ hai có thể đã được sử dụng trong C++ 03 để khởi tạo tổng hợp.

Bạn cũng có thể sử dụng trực tiếp khởi tạo và vượt qua danh sách initializer như là đối số:

QVector<int> v({1, 2, 3, 4, 5}); 

Kể từ khi các nhà xây dựng không phải là explicit, nó cũng có thể được sử dụng trong một số cách thú vị khác:

  1. Vượt qua một đối số QVector:

    void foo(QVector<int>); 
    
    foo({1, 2, 3, 4, 5}); 
    
  2. Trả về một QVector:

    QVector<int> bar() 
    { 
        return {1, 2, 3, 4, 5}; 
    } 
    

§8.5.4 List-khởi [dcl.init.list]:

Một constructor là một initializer-list constructor nếu tham số đầu tiên của nó là loại std::initializer_list<E> hoặc tham chiếu đến có thể đủ điều kiện cv std::initializer_list<E> đối với một số loại E và ở đó không có tham số khác hoặc các tham số khác có đối số mặc định (8.3.6).

§13.3.1.7 Khởi tạo bởi danh-khởi [over.match.list]:

Khi đối tượng của phi tổng hợp lớp loại T là danh sách khởi tạo (8.5.4), độ phân giải quá tải lựa chọn các nhà xây dựng trong hai giai đoạn:

  • Ban đầu, các chức năng ứng cử viên là các nhà thầu initializer-list (8.5.4) của lớp T và danh sách đối số bao gồm các danh sách initializer như một đối số duy nhất.

  • [...]

+0

Nếu một hàm có một QVector lập luận như 'Fun (QVector )', có thể gọi nó như 'Fun (QVector {1,2})' ? Cảm ơn. – user1899020

+2

@ user1899020 Có, bạn có thể. Trong thực tế, hàm tạo này của 'QVector' không phải là' tường minh', vì vậy bạn thậm chí có thể làm 'Fun ({1, 2, 3})'. –

+0

'QVector v {1, 2, 3, 4, 5}' thậm chí không cần '()' như 'QVector v ({1, 2, 3, 4, 5})'.Nếu tôi thêm(), tôi nghĩ nó cũng sẽ hoạt động. Đúng? – user1899020

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