2013-05-15 33 views
27

C++ 11 đã thực hiện chức năng thành viên data() thành viên trên std::vector, cung cấp cho bạn một con trỏ đến mảng bộ nhớ. Điều này có nghĩa là chuyên môn mẫu std::vector<bool> cũng có thành viên này không? Vì chuyên môn này không lưu trữ dữ liệu theo điều khoản của bool *, bạn có thể mong đợi loại hành vi nào từ việc gọi data()?Điều gì xảy ra khi bạn gọi dữ liệu() trên std :: vector <bool>?

Trả lời

19

page ghi lại lớp này một cách rõ ràng cho biết rằng chuyên môn không cung cấp phương pháp này.

Chuyên môn có cùng chức năng thành viên như vectơ không chuyên biệt, ngoại trừ dữ liệu, emplace và emplace_back, không có trong chuyên môn này.

Điều này other page cũng như §23.3.7 của số C++ specifications để xác nhận.

+6

C++ 11 23.3.7 cho biết điều tương tự, có thể quan tâm nhiều hơn) –

+8

Không bao giờ tin tưởng cplusplus.com – Yakk

+5

@Yakk: Có điều gì sai với trang đó không, hoặc bạn có đang theo dõi sự thù hận không giải thích được mà tôi tiếp tục thấy cho trang web đó quanh đây? –

26

Nó sẽ không biên dịch, trừ khi triển khai của bạn có tiện ích mở rộng không chuẩn. Chuyên môn của std::vector<bool>, như được chỉ rõ trong C++ 11 23.3.7/1, không khai báo thành viên data.

+4

Tôi đã cố gắng thực hiện điều này và lỗi 'gcc' mà tôi nhận được là' dữ liệu' là "giá trị void không bị bỏ qua vì nó phải là", ngụ ý rằng hàm được triển khai, nhưng có 'void' loại trả về. Đó là tò mò. –

+1

@MatsPetersson: Thực sự tò mò. GCC định nghĩa một hàm void, với một nhận xét bí ẩn nói rằng "chúng ta cần một cái gì đó ở đây do cách chúng ta đang thực hiện DR 464 trong lớp vector chế độ gỡ lỗi" (DR 464 là đề xuất thêm 'data()' vào chung ' mẫu vector'). –

1

Vâng, không có std::vector<bool>::data, vì vậy điều bạn có thể mong đợi là lỗi biên dịch.

3

số mỗi std::vector<bool>

Không nhất thiết phải lưu trữ dữ liệu của mình trong một đoạn tiếp giáp duy nhất của bộ nhớ .

Không có thành viên data().

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