2011-11-30 50 views
6

Tôi chỉ nhận được cảnh báo khi truy cập địa chỉ của phần tử trong vector của bool. Đối với vectơ của các loại dữ liệu khác như int tôi không nhận được bất kỳ cảnh báo nào.lấy địa chỉ tạm thời trong khi truy cập địa chỉ của một phần tử trong vector <bool>

ví dụ

vector<bool> boolVect; 
boolVect.push_back(false); 
if (boolVect.size() > 0) { 
    cout << &boolVect[0] << endl; 
} 

tôi nhận được cảnh báo "lấy địa chỉ tạm" ở tuyên bố "cout < < & boolVect [0] < < endl;"
Ai đó có thể vui lòng làm rõ?

+2

Hãy thử sử dụng 'deque ' 'thay thế. Nó sẽ hoạt động như bạn mong đợi. – fschoenm

Trả lời

13

std::vector<bool> bị hỏng (xem ví dụ: http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=98 hoặc Alternative to vector<bool>). Đó là một chuyên môn của std::vector<T>, nhưng các yếu tố riêng lẻ được lưu trữ dưới dạng các bit được đóng gói. Do đó, bạn không thể lấy địa chỉ của một phần tử riêng lẻ. Vì vậy, nó thực sự gây phiền nhiễu.

+2

Có, _broken_ là thuật ngữ chính xác. –

+0

Tôi có một lớp mẫu. Nó sử dụng "vectơ vect" và địa chỉ truy cập (& vect [i]). Tôi nhận được cảnh báo thời gian biên dịch ở đây cho T = bool. Làm thế nào tôi có thể thoát khỏi cảnh báo này nếu cho T = bool, địa chỉ không được truy cập? – Rahul

+0

@Rahul (Thời gian dài kể từ khi bạn đăng, nhưng vẫn ...) Bạn có thể làm một chuyên môn mẫu cho bool không? Bạn có thể cung cấp một triển khai khác cho bool để tránh lấy địa chỉ của một phần tử. – Daryn

3

A vector<bool> là chuyên môn mẫu của tiêu chuẩn vector. Trong một thực hiện bình thường, nó tiết kiệm không gian, mỗi bool chỉ mất một chút. Để thuận tiện, bạn nhận được một đối tượng tạm thời như một tham chiếu cho bit duy nhất của bạn mà bạn không thể giải quyết.

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