想象一下这个C ++代码(使用clang的块语言扩展)。
auto now = std::chrono::system_clock::now();
std::async(^ {
auto time = now;
// ...
});
time
的类型是什么?会是decltype(now)
还是decltype(now)&
?如果是后者,我怎样才能确保在块运行之前复制它?
答案 0 :(得分:5)
根据block language specification,对象被复制,其类型为decltype(now)
。
通过复制const构造函数将堆栈本地对象复制到块中。如果不存在这样的构造函数,则从块复合语句中引用此类对象被视为错误。