![](/img/trans.png)
[英]Why is the copy constructor called on a function argument when the argument is passed by reference?
[英]Why is a copy constructor being called when passing an atomic into a variadic argument?
我正在嘗試將一個std::atomic<unsigned int>
傳遞到一個帶有可變參數的 function 中:
#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 種情況下被調用:
如果您不想調用復制構造函數,請通過引用(最好是常量)傳遞 object 以避免調用復制構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.