2016-01-04 14 views
7

Mỗi lambda nên có một loại không xác định duy nhất .. là nó đảm bảo rằng hai lambdas vào cùng một phạm vi có các loại khác nhau?Thịt cừu có nhiều loại khác nhau không?

int main() { 
    auto l1 = [](){}; 
    auto l2 = [](){}; 
    static_assert(std::is_same<decltype(l1), decltype(l2)>::value == false, "Types cannot be equal!"); 
} 

Tác phẩm này nhưng tôi muốn biết nếu nó được đảm bảo rằng khẳng định sẽ không bao giờ kích hoạt.

Trả lời

12

Vâng, mỗi biểu thức lambda tạo ra một loại duy nhất ([expr.prim.lambda]/3):

Các loại lambda-biểu thức (mà cũng là kiểu của đối tượng đóng) là một duy nhất, loại không phải là loại không hợp nhất - được gọi là loại đóng - có các đặc tính được mô tả bên dưới.

[nhấn mạnh thêm]

+1

Bất kỳ cơ hội bạn có thể thêm một liên kết đến nguồn gốc của các báo giá cho trọn vẹn, cho rằng các báo kết thúc "Như đã trình bày bên dưới"? –

+3

@IStanley: '[expr.prim.lambda]/3' là một thuộc tính (nó biểu thị một phần trong tiêu chuẩn C++). –

+0

bạn học điều gì đó mới mỗi ngày! Cảm ơn. –

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