2016-01-04 23 views
5

Trong C++ một cái gì đó 14 như thế này đã được thực hiện theo pháp luật (đối với lambdas): -tự như chức năng lập luận

auto l = [](auto x, auto y) { return x+y; }; 

Tuy nhiên một cái gì đó như thế này vẫn không hợp pháp: -

auto sum (auto x, auto y) 
{ 
    return x+y; 
} 

sự tò mò của tôi là lý do tại sao không phải là thứ hai được thêm vào tiêu chuẩn (mặc dù nó được cho là được thêm vào trong C + + 17 hy vọng)? Các ưu điểm của & là điểm yếu thứ hai?

+0

mẫu nhiều !? – StoryTeller

Trả lời

6

Nó không được thêm bởi vì nó là một điều để thêm và thời gian không phải là vô hạn. Chúng tôi không thể mong đợi tất cả các cải tiến hữu ích được thêm vào trong một lần, chúng ta có thể? Như bạn đã xác định, nó sẽ có trong C++ 17.

+0

Thời gian * là * hữu hạn. – YSC

+0

Bây giờ tôi đang bối rối. Thời gian là vô hạn hoặc thời gian là hữu hạn hoặc thời gian là cả hai? Paging [physics.stackexchange] (http://physics.stackexchange.com/) – AndyG

+1

Để làm cho mọi người hạnh phúc, chúng ta sẽ nói thời gian là 'O (vô cùng)'. – erip

3

Đó là một phần của TS chưa sẵn sàng kịp thời cho C++ 14.

Nó sẽ là tương đương với

template <typename T, typename U> 
auto sum(T x, U y) { return x+y } 

Các pro duy nhất là nó hơi ngắn hơn. Mọi thứ khác là như nhau.

+0

Bao gồm các nhánh ODR? Định nghĩa trong mỗi TU vv? (Phải, tôi cho rằng - điều này khiến tôi nghĩ rằng tính năng mới này chỉ là một đống lộn xộn lớn đang chờ xảy ra) –

+0

@LightnessRacesinOrbit Tôi không nghĩ rằng nó sẽ gây nhầm lẫn nếu một được sử dụng cho các mẫu –

+0

@AnkitAcharya: Có lẽ nhưng tính năng theo nghĩa đen là "tạo mẫu giống như không phải mẫu". Dường như không phải là một ý tưởng tuyệt vời đối với tôi. –

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