Tôi có câu hỏi về the different meanings of a curly-brace enclosed list.Tại sao GCC 6.3 biên dịch mã Braced-Init-List này mà không cần hỗ trợ C++ 11 rõ ràng?
Tôi biết rằng C++ 03 không hỗ trợ C232 11 initializer_list
. Tuy nhiên, ngay cả khi không cờ -std=c++11
trình biên dịch, gcc 6.3 will properly initialize interpolate
với mã này:
map<string, string> interpolate = { { "F", "a && b && c" }, { "H", "p^2 + w" }, { "K", "H > 10 || e < 5" }, { "J", "F && !K" } };
I was challenged về lý do tại sao điều này sẽ làm việc, và tôi nhận ra tôi không có một câu trả lời. Đây là một Brace-Init-List, nhưng cách chúng ta nhận được từ đó để khởi tạo một thùng chứa tiêu chuẩn thường thông qua một initializer_list
. Vậy mã không phải C++ 11 sẽ hoàn thành việc khởi tạo như thế nào?
Tôi khá ngạc nhiên khi câu hỏi này được đưa ra cho 'Câu hỏi về Câu hỏi Mạng Nóng': | Tôi nghĩ rằng điều này cũng được tài liệu của gcc và một số nơi trên internet về cờ biên dịch mặc định trong gcc mới – P0W
@ P0W Tôi cũng hơi ngạc nhiên. Tại thời điểm tôi hỏi nó tôi giả định, tương tự như hành vi mặc định trong gcc 5, tôi đã sử dụng "-std = C++ 98". Tôi đoán rất nhiều người chỉ tình cờ gặp mặt người có cùng quan niệm trước. Đừng lo lắng, tôi chắc chắn nó chỉ là quang sai, tỷ lệ bỏ phiếu bình thường C++ sẽ sớm được khôi phục. –