Câu hỏi đơn giản về cú pháp C++ 11. Có một mã mẫu (giảm một từ source)Gọi ctor với niềng răng
struct Wanderer
{
explicit Wanderer(std::vector<std::function<void (float)>> & update_loop)
{
update_loop.emplace_back([this](float dt) { update(dt); });
}
void update(float dt);
};
int main()
{
std::vector<std::function<void (float)>> update_loop;
Wanderer wanderer{update_loop}; // why {} ???
}
Tôi muốn biết, làm thế nào nó có thể được có thể xây dựng cuộc gọi với dấu ngoặc nhọn như Wanderer wanderer{update_loop};
Nó không phải là danh sách initializer, cũng không phải khởi tạo thống nhất. Có chuyện gì vậy?
Nhưng đó là khởi tạo đồng bộ. Niềng răng có thể được sử dụng để gọi các hàm tạo, mặc dù hàm tạo sử dụng 'std :: initializer_list' của kiểu đó luôn được ưa thích. – chris
'// why {} ???' - Câu hỏi hay. Không có lý do gì để thích nó hơn 'Wanderer wanderer (update_loop)'. – ipc
@ipc Trong một số trường hợp, nó có thể tránh được phân tích cú pháp khó chịu nhất. – juanchopanza