簡體   English   中英

有沒有辦法在C ++編譯器中禁用復制省略

[英]Is there a way to disable copy elision in c++ compiler

在c ++ 98中,預期以下程序將調用復制構造函數。

#include <iostream>

using namespace std;
class A
{
  public:
    A() { cout << "default" ; }

    A(int i) { cout << "int" ; }


    A(const A& a) { cout << "copy"; }
};

int main ()
{
   A a1;
   A a2(0);
   A a3 = 0;

  return 0;
}

如果在上述情況下顯式聲明了復制構造函數,則很明顯(編譯器出錯了)。 但是當未將其聲明為顯式時,我看不到副本構造函數的輸出。 我猜那是因為復制省略。 有什么方法可以禁用復制省略功能,或者標准規定嗎?

C++ 17

A a3 = 0;

除非刪除了副本,否則將調用副本構造函數。 通過-fno-elide-constructors標志

C++17 ,保證復制省略。 因此,您不會看到復制構造函數被調用。

您對復制省略是什么有錯誤的了解。 請參考此問題以獲取更多信息。

在這種情況下,如果顯式定義構造函數,則將導致錯誤,因為A a3 = 0; 在這一行,編譯器使用0創建了一個對象。

暫無
暫無

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

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