当我在C ++中使用块时,是否会复制或引用对象?

时间:2012-05-20 16:01:20

标签: clang objective-c-blocks objective-c++

想象一下这个C ++代码(使用clang的块语言扩展)。

auto now = std::chrono::system_clock::now();

std::async(^ {
  auto time = now;
  // ...
});

time的类型是什么?会是decltype(now)还是decltype(now)&?如果是后者,我怎样才能确保在块运行之前复制它?

1 个答案:

答案 0 :(得分:5)

根据block language specification,对象被复制,其类型为decltype(now)

  

通过复制const构造函数将堆栈本地对象复制到块中。如果不存在这样的构造函数,则从块复合语句中引用此类对象被视为错误。