Tôi không hiểu một cách sử dụng cụ thể của dấu hai chấm.
Tôi tìm thấy nó trong cuốn sách Ngôn ngữ lập trình C ++ của Bjarne Stroustrup, ấn bản thứ 4, phần 11.4.4 "Gọi và trả lại", trang 297:
void g(double y)
{
[&]{ f(y); } // return type is void
auto z1 = [=](int x){ return x+y; } // return type is double
auto z2 = [=,y]{ if (y) return 1; else return 2; } // error: body too complicated
// for return type deduction
auto z3 =[y]() { return 1 : 2; } // return type is int
auto z4 = [=,y]()−>int { if (y) return 1; else return 2; } // OK: explicit return type
}
Dấu hai chấm khó hiểu xuất hiện trên dòng 7, trong tuyên bố return 1 : 2
. Tôi không biết nó có thể là gì. Nó không phải là một nhãn hoặc nhà điều hành ternary.
Nó có vẻ như là một toán tử ternary có điều kiện mà không có thành viên đầu tiên (và không có ?
), nhưng trong trường hợp đó tôi không hiểu làm thế nào nó có thể hoạt động mà không có điều kiện.