Hãy xem xét điều này:Rõ ràng khởi tạo vector của con trỏ dẫn đến lỗi chuyển đổi?
std::vector<int*> v(1, 0);
này biên dịch tốt với VC++ 10 (không có cảnh báo ngay cả ở mức báo động tối đa). Tuy nhiên, nó không biên dịch với llvm trên mac hoặc gcc trên linux, đưa ra một lỗi như "gán cho int * từ int không tương thích kiểu int." Tôi không tìm kiếm giải pháp - Tôi biết tham số thứ hai là không cần thiết hoặc một static_cast sửa lỗi.
Tôi nghĩ số không được chuyển đổi hoàn toàn thành bất kỳ loại con trỏ nào. Đưa cái gì? Tôi có thể làm như sau:
int* i = 0;
int* const& ii = 0;
const int t = 0;
i = t;
Tôi hiểu rằng chữ ký constructor vector mất một const T&
mà khi mở rộng cho vector<int*>
trở thành int* const&
có đúng không? Ai đó có thể giải thích những gì đang xảy ra ở đây, và cho dù trình biên dịch VC++ hoặc phi VC++ là chính xác?
Thử 'nullptr' thay vì' 0'. – ildjarn
Bạn có biên dịch chương trình này dưới dạng chương trình C++ 03 hoặc C++ 11 không? –
Không liên quan đến câu hỏi, nhưng, tại sao bạn lại sử dụng các con trỏ thô khi [Bjarne nói chúng ta nên tránh chúng] (http://channel9.msdn.com/Events/GoingNative/GoingNative-2012/Keynote-Bjarne-Stroustrup-Cpp11- Phong cách)? –