簡體   English   中英

為什么在將原子傳遞給可變參數時調用復制構造函數?

[英]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 種情況下被調用:

  1. 當按值傳遞 object 時
  2. 按值返回 object 時
  3. 當 object 被初始化為相同類型的 object 的值時。

如果您不想調用復制構造函數,請通過引用(最好是常量)傳遞 object 以避免調用復制構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM