为什么在将原子传递到可变参数中时要调用复制构造函数



我正试图将std::atomic<unsigned int>传递到一个具有可变参数的函数中,例如:

#include <cstdio>
#include <cstdarg>
#include <atomic>
void info(const char* expression, ...)
{
std::va_list arg;
va_start(arg, expression);
std::vprintf(expression, arg);
std::printf("n");
std::fflush(stdout);
va_end(arg);
}
int main()
{
std::atomic<unsigned int> value(10);
info("Testing: %u", value);
return 0;
}

按原样,我得到编译器错误:error: use of deleted function ‘std::atomic::atomic(const std::atomic&)’。但是,如果我将主中的info调用更改为info("Testing: %u", value.load());,则一切都很好。

为什么在我没有指定加载的情况下调用复制构造函数?

复制构造函数在三种情况下被调用:

  1. 通过值传递对象时
  2. 按值返回对象时
  3. 当一个对象被初始化为相同类型的对象的值时

如果不想调用复制构造函数,请通过引用传递对象(最好是常量(以避免调用复制构造函数。

相关内容

  • 没有找到相关文章

最新更新