Tôi đang gặp phải điều gì đó rất lạ khi sử dụng các tác vụ đóng gói. Khi đọc ~packaged_task Tôi nhận được ấn tượng rằng nếu std::packaged_task
bị hủy trước khi nó được thực hiện, lời hứa sẽ bị hỏng và nỗ lực lấy kết quả từ tương lai sẽ ném std::future_error
.std :: packaged_task không phá vỡ lời hứa về sự hủy diệt?
Tuy nhiên, trên Visual Studio 2013, điều này có vẻ không đúng. Hãy mã sau đây:
#include <iostream>
#include <future>
#include <functional>
int main() {
std::future<int> f;
{
std::packaged_task<int()> task([](){return 3; });
f = task.get_future();
}
std::cout<<f.get()<<std::endl;
return 0;
}
Tôi đang chờ đợi để có được một std::future_error
trên f.get()
nhưng thay vào đó nó chặn, chờ đợi cho các nhiệm vụ đóng gói được thực hiện.
Đang cố gắng biên dịch khác: http://ideone.com/Wt0WOc không thực sự ném một std::future_error("Broken promise")
...
Am Tôi nhìn thấy một lỗi trong Visual Studio 2013 hoặc tôi đã bị mất cái gì?
Vì vậy, tôi đã đọc những liên kết này một cách chính xác, điều này sẽ không được sửa trong VS 2013? –
@EmilyL. Tôi rất muốn nói. Theo [Q5 trong phần Câu hỏi thường gặp của trang này] (http://blogs.msdn.com/b/vcblog/archive/2013/06/28/c-11-14-stl-features-fixes-and-breaking -changes-in-vs-2013.aspx), họ chỉ sửa lại các bản sửa lỗi. –
Tuyệt vời, hãng phim chúng tôi mua chỉ mới một tuổi và họ đã rời khỏi chúng tôi trong một nhúm. * thở dài * Cảm ơn bạn đã xác nhận. Chấp nhận câu trả lời này khi các liên kết đưa ra xác nhận cuối cùng về những nghi ngờ của tôi. –