Liên quan đến giấy mô tả loại bỏ các chuyên ngành void cho std :: tương lai và std :: lời hứa P0241R0. Đây có thể là một câu hỏi ngu ngốc nhưng giải pháp được đề xuất là xóa hoàn toàn chuyên môn về void, nhưng sau đó mọi người dự kiến sẽ làm gì khi họ muốn khởi tạo đối tượng std::future<void>
?Loại bỏ các chuyên biệt void cho std :: tương lai và std :: lời hứa
Trả lời
Như đã nêu trong tham chiếu, điều này có thể là if void
were a regular type.
void get_value() {
void x;
return x;
}
Đây là cách nó hoạt động ở một số ngôn ngữ khác, vì vậy nó không phải không có tiền lệ. Trong các ngôn ngữ khác, nó được gọi là loại "đơn vị", bởi vì nó có chính xác một giá trị có thể. (Các ngôn ngữ khác cũng có loại "null", không có giá trị nào có thể, vì vậy nếu bạn cố gắng tạo ra một lỗi, nó có tên là "null" nhưng nó không liên quan đến con trỏ null.)
Mục đích của std :: tương lai là để biết khi một quá trình không có giá trị thực tế để trả lại đã kết thúc. Vì vậy, về cơ bản nó là một công cụ đồng bộ hóa.
Điều này không trả lời được câu hỏi. –
- 1. tương lai, lời hứa và ngoại lệ
- 2. Thực hiện lời hứa (có thể là void)
- 3. std :: chuyên môn tùy chọn cho các loại tham chiếu
- 4. Sự khác biệt giữa tương lai trong Python3 và lời hứa trong ES6
- 5. Chụp std :: lời hứa trong lambda C++ 14
- 6. C + + lời hứa/tương lai: Trả về từ chức năng nào?
- 7. std :: tương lai vẫn chậm khi sử dụng std :: packaged_task (VS11)
- 8. Tại sao std :: packaged_task <void()> không hợp lệ?
- 9. Tương lai của std :: valarray trông như thế nào?
- 10. Chuyển đổi std :: function <void (Derived *)> thành std :: function <void(Base*)>
- 11. Thay thế std :: async với phiên bản của riêng mình nhưng nên std :: lời hứa sống ở đâu?
- 12. Khi nào std :: tương lai được thực thi?
- 13. có thể là một std :: lời hứa được thực hiện từ một đối tượng không POD?
- 14. Chuyển đổi một void * thành std :: string
- 15. std :: packaged_task không phá vỡ lời hứa về sự hủy diệt?
- 16. Lời hứa/Bản mẫu ES6 và Lời hứa Bluebird
- 17. loại bỏ khoảng trắng trong std :: string
- 18. Sự khác biệt giữa std: string và std :: string
- 19. sự khác biệt giữa std :: di chuyển và std :: mong
- 20. Whats sự khác biệt giữa std :: condition_variable và std :: condition_variable_any?
- 21. Hủy tương lai và hứa hẹn tại Scala
- 22. Tạo tương lai từ tương lai trung gian?
- 23. std :: forward_list và std :: forward_list :: push_back
- 24. tương đương với lời hứa của bluebird là gì trong các lời hứa ES6 bản địa?
- 25. tương đương strncpy cho std :: string?
- 26. std :: băm mẫu phần chuyên môn hóa
- 27. Dựa vào ADL cho std :: begin() và std :: end()?
- 28. Template typedef cho container std (không có chuyên môn)?
- 29. Hiểu std :: function và std :: bind
- 30. std :: chức năng và std :: hành vi
Để trả lời trực tiếp câu hỏi "mọi người mong đợi làm gì" - họ không có gì khác biệt_. 'tương lai' không biến mất, nó chỉ không cần chuyên môn hóa. –
@DrewDormann: Từ những gì tôi hiểu bạn sẽ phải thực hiện một số thay đổi, vì việc xóa 'std :: promise' chuyên môn sẽ có nghĩa là hàm 'set_value()' không còn tồn tại nữa, và bạn sẽ phải gọi 'set_value ({}) 'thay thế. –