如果我寫C++類型複製初始化
T t = T();
T是一個類。
我認爲這是調用T的默認構造函數,然後調用複製賦值操作符。 但編譯器被允許擺脫作業。
我試圖找到用C++標準寫的這種行爲的描述,但我找不到它。 你能指點我在標準中的正確位置嗎?
我問這個,因爲我被要求更換此:
T t;
與
T t = T();
因爲編碼規則檢查程序。
它發生的T類是不可複製的,並有一個私人拷貝構造函數和複製賦值操作符...所以我想看到,在這種情況下,編譯器實際上總是擺脫副本。
編輯: 我一直在誤導的奇怪的東西: 的noncompyable類實際上是從boost ::不可複製 在這種情況下它編譯繼承。 但是,如果我聲明覆制構造函數和複製賦值運算符是私有的,它不會編譯。例如 。這將編譯:
class BA
{
protected:
BA() {}
~BA() {}
private:
BA(const BA&);
const BA& operator=(const BA&);
};
class A : BA
{
};
int main(void)
{
A a = A();
return 0;
}
及以下不:
class A
{
public:
A() {}
~A() {}
private:
A(const A&);
const A& operator=(const A&);
};
int main(void)
{
A a = A();
return 0;
}
什麼是編碼規則?對於一個類類型(帶有一個拷貝構造函數,只是拷貝),'T t'與'T t = T()'相同。如果你的代碼檢查器無法檢測到這一點,那麼你應該改變你的檢查器。你會爲無法複製的第三方庫類型做些什麼? –