[英]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;
}
如果在上述情況下顯式聲明了復制構造函數,則很明顯(編譯器出錯了)。 但是當未將其聲明為顯式時,我看不到副本構造函數的輸出。 我猜那是因為復制省略。 有什么方法可以禁用復制省略功能,或者標准規定嗎?
您對復制省略是什么有錯誤的了解。 請參考此問題以獲取更多信息。
在這種情況下,如果顯式定義構造函數,則將導致錯誤,因為A a3 = 0;
在這一行,編譯器使用0創建了一個對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.