为什么在将原子传递给可变参数时调用复制构造函数?
Why is a copy constructor being called when passing an atomic into a variadic argument?
我正在尝试将 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&)’
。但是,如果我将 main 中的信息调用更改为 info("Testing: %u", value.load());
,一切正常。
为什么在我没有指定加载时调用复制构造函数?
复制构造函数在 3 种情况下被调用:
- 当对象按值传递时
- 当对象按值返回时
- 当一个对象被初始化为同类型对象的值时。
如果不想调用复制构造函数,通过引用(最好是常量)传递对象以避免调用复制构造函数。
我正在尝试将 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&)’
。但是,如果我将 main 中的信息调用更改为 info("Testing: %u", value.load());
,一切正常。
为什么在我没有指定加载时调用复制构造函数?
复制构造函数在 3 种情况下被调用:
- 当对象按值传递时
- 当对象按值返回时
- 当一个对象被初始化为同类型对象的值时。
如果不想调用复制构造函数,通过引用(最好是常量)传递对象以避免调用复制构造函数。